如何修复 UIButton sizeToFit/sizeThatFits 的宽度?
Posted
技术标签:
【中文标题】如何修复 UIButton sizeToFit/sizeThatFits 的宽度?【英文标题】:how to fix width in UIButton's sizeToFit/sizeThatFit? 【发布时间】: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 根据其原始宽度将按钮框架调整到适当的高度。如何做到这一点?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何修复 UIButton sizeToFit/sizeThatFits 的宽度?的主要内容,如果未能解决你的问题,请参考以下文章
我该如何修复此警告信息。警告:忽略“UIButton”实例上的键路径“radius”的用户定义的运行时属性
只需要修复 UIButton 和 UILabel 的自动布局问题