使用大小类时调整UIButton框架的大小需要自动布局

时间:2015-08-19 23:25:13

标签: uibutton resize autolayout uistoryboard size-classes

我使用storyboard在tableview中布局自定义单元格。我在这个自定义单元格中有一个UI按钮,其初始x,y大小为60x7。此UI按钮(与故事板中的所有对象一样)使用带有大小类的自动布局。

当用户点击视图中的编辑按钮时,我想将每个单元格中UIButton的大小更改为60x60。用于更改UIButton大小的各种StackOverflow解决方案执行如下操作:

CGRect buttonFrame = cell.button1Left.frame;
buttonFrame.size = CGSizeMake(60, 60);
cell.button1Left.frame = buttonFrame;

但解决方案还警告说,除非您关闭自动布局,否则这将不起作用。但是,当我尝试在自定义单元格中关闭此UIButton的自动布局时,我收到以下警告:

enter image description here

这个警告吓到了我。如果我禁用大小类,这会弄乱我的布局,禁用我的segues,并使未来的更改更加困难吗?如果是这样,还有其他方法可以完成我正在尝试的事情吗?

额外问题:是否可以为UIButton的大小调整设置动画(即使其看起来伸展到更大的尺寸)?

2 个答案:

答案 0 :(得分:1)

试试这个:

1)在故事板中为Button添加2个约束;

2)为他们创建属性:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *btnHeight;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *btnWidth;

3)向按钮点击添加操作:

- (IBAction)buttonPressed:(id)sender {
    UIButton *btn = (UIButton *)sender;
    btn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);

    self.btnHeight.constant +=50;
    self.btnWidth.constant +=50;

    [UIView animateWithDuration: 0.7 animations:^{
        [self.view layoutIfNeeded];
    }];
}

P.S。如果您的按钮位于单元格的中心,则还需要创建顶部和左侧约束,如果您将高度和宽度设置为50,则需要将顶部和左侧设置为较小的25个。

答案 1 :(得分:0)

我认为对我来说最好的解决方案是创建另一个已经达到所需尺寸的UIButton。当用户按下视图的编辑按钮时,我隐藏了60x7的折叠UIButton。然后我取消隐藏60x60的全尺寸UIButton。为了使过渡看起来更加自然,我做了以下几点:

        [UIView transitionWithView:cell.pencilButtonLeft
                          duration:0.6
                           options:UIViewAnimationOptionTransitionFlipFromBottom
                        animations:NULL
                        completion:NULL];
        cell.pencilButtonLeft.hidden = NO;

至于我试图关闭自动调整大小时的警告消息,我决定不关闭自动调整大小而不禁用大小类。在仔细阅读时,只要我没有打算在iPhone以外的设备上运行应用程序,我就可以一直没问题。感谢@Ptah对动画的建议。