Как исправить ширину в UTButton sizeToFit / sizeThatFit? - PullRequest
0 голосов
/ 28 апреля 2019

Я обнаружил, что 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 Ответ

1 голос
/ 28 апреля 2019

Если вы хотите изменить размер, установленный 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)
    }
}

Цель 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: sizeToFit

...