【问题标题】:how to fix width in UIButton's sizeToFit/sizeThatFit?如何修复 UIButton sizeToFit/sizeThatFits 的宽度?
【发布时间】:2019-04-28 04:11:41
【问题描述】:

我发现 sizeToFit 或 sizeThatFits 会改变 UIButton 的当前宽度。

UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 100, 200, 40);
btn.backgroundColor = [UIColor redColor];
[btn.titleLabel setText:@"ssdkfjsakdfjsakfjaksdjfkasjfkasjkfasjkfsajfkasjkas"];
btn.titleLabel.numberOfLines = 0;
[btn setTitle:@"ssdkfjsakdfjsakfjaksdjfkasjfkasjkfasjkfsajfkasjkas" forState:UIControlStateNormal];
[self.view addSubview:btn];

NSLog(@"before sizeToFit: %@",NSStringFromCGRect(btn.frame));
CGSize size = [btn sizeThatFits:CGSizeMake(200, 1000)];
[btn sizeToFit];

NSLog(@"after sizeToFit:%@",NSStringFromCGRect(btn.frame));
NSLog(@" sizeThatFits:%@",NSStringFromCGSize(size));

输出将是:

before sizeToFit: {{100, 100}, {200, 40}}
after sizeToFit:{{100, 100}, {392, 34}}
sizeThatFits:{392, 34}

这不是我想要的行为,如果我希望 sizeToFit 根据其原始宽度将按钮框架调整到适当的高度。如何做到这一点?

【问题讨论】:

    标签: ios uibutton sizetofit


    【解决方案1】:

    如果你想改变 sizeToFit 设置的尺寸,你需要重写 sizeThatFits 方法。创建UIButton的子类如下:

    斯威夫特:

    class MyButton: UIButton {
        override func sizeThatFits(_ size: CGSize) -> CGSize {
            let sizeThatFits = super.sizeThatFits(size)
            return CGSize(width: sizeThatFits.width, height: self.frame.height)
        }
    }
    

    目标 C:

    @implementation MyButton
    
    - (CGSize)sizeThatFits:(CGSize)size {
        CGSize sizeThatFits = [super sizeThatFits:size];
        return CGSizeMake(sizeThatFits.width, self.frame.size.height);
    }
    
    @end
    

    并使用子类按钮而不是 UIButton。

    UIButton* btn = [MyButton buttonWithType:UIButtonTypeCustom];
    

    参考:Apple Doc: sizeToFit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 2013-11-06
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多