如何修复 UIButton 的 sizeToFit/sizeThatFit 中的宽度?
how to fix width in UIButton's sizeToFit/sizeThatFit?
我发现 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 根据其原始宽度将按钮框架的大小调整到适当的高度。如何实现这一点?
如果要改变sizeToFit设置的尺寸,需要重写sizeThatFits方法。创建UIButton
的子类如下:
Swift:
class MyButton: UIButton {
override func sizeThatFits(_ size: CGSize) -> CGSize {
let sizeThatFits = super.sizeThatFits(size)
return CGSize(width: sizeThatFits.width, height: self.frame.height)
}
}
Objective 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];
我发现 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 根据其原始宽度将按钮框架的大小调整到适当的高度。如何实现这一点?
如果要改变sizeToFit设置的尺寸,需要重写sizeThatFits方法。创建UIButton
的子类如下:
Swift:
class MyButton: UIButton {
override func sizeThatFits(_ size: CGSize) -> CGSize {
let sizeThatFits = super.sizeThatFits(size)
return CGSize(width: sizeThatFits.width, height: self.frame.height)
}
}
Objective 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];