使用大小 类 时调整 UIButton 框架的大小需要自动布局
Resizing UIButton Frame While Using Size Classes Requires Auto Layout
我已经使用故事板在表格视图中布置自定义单元格。我在这个自定义单元格中有一个 UI 按钮,其初始 x,y 大小为 60x7。此 UI 按钮(与故事板中的所有对象一样)使用大小为 类 的自动布局。
当用户单击视图中的编辑按钮时,我想将每个单元格中 UI 按钮的大小更改为 60x60。用于更改 UI 按钮大小的各种 Whosebug 解决方案执行如下操作:
CGRect buttonFrame = cell.button1Left.frame;
buttonFrame.size = CGSizeMake(60, 60);
cell.button1Left.frame = buttonFrame;
但解决方案还警告说,除非您关闭自动布局,否则这将不起作用。但是,当我尝试关闭自定义单元格中此 UI 按钮的自动布局时,我收到以下警告:
这个警告吓到我了。如果我禁用 size 类,这会不会弄乱我的布局,禁用我的 segues,并使将来的更改更加困难?如果是这样,还有其他方法可以完成我正在尝试的事情吗?
额外的问题:是否可以为 UI 按钮的大小调整设置动画(即它看起来会拉伸到更大的尺寸)?
试试这个:
1) 在故事板中为您的按钮添加 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。
我认为对我来说最好的解决方案是创建另一个已经达到所需大小的 UIButton。当用户按下视图的编辑按钮时,我隐藏了 60x7 的折叠 UIButton。然后我取消隐藏 60x60 的全尺寸 UIButton。为了让过渡动画看起来更自然,我做了以下操作:
[UIView transitionWithView:cell.pencilButtonLeft
duration:0.6
options:UIViewAnimationOptionTransitionFlipFromBottom
animations:NULL
completion:NULL];
cell.pencilButtonLeft.hidden = NO;
至于我尝试关闭自动调整大小时的警告消息,我决定不关闭自动调整大小,也不禁用大小 类。仔细阅读它,只要我不打算 运行 在 iPhone 以外的设备上使用该应用程序,我可能就没问题。感谢@Ptah 对动画的建议
我已经使用故事板在表格视图中布置自定义单元格。我在这个自定义单元格中有一个 UI 按钮,其初始 x,y 大小为 60x7。此 UI 按钮(与故事板中的所有对象一样)使用大小为 类 的自动布局。
当用户单击视图中的编辑按钮时,我想将每个单元格中 UI 按钮的大小更改为 60x60。用于更改 UI 按钮大小的各种 Whosebug 解决方案执行如下操作:
CGRect buttonFrame = cell.button1Left.frame;
buttonFrame.size = CGSizeMake(60, 60);
cell.button1Left.frame = buttonFrame;
但解决方案还警告说,除非您关闭自动布局,否则这将不起作用。但是,当我尝试关闭自定义单元格中此 UI 按钮的自动布局时,我收到以下警告:
这个警告吓到我了。如果我禁用 size 类,这会不会弄乱我的布局,禁用我的 segues,并使将来的更改更加困难?如果是这样,还有其他方法可以完成我正在尝试的事情吗?
额外的问题:是否可以为 UI 按钮的大小调整设置动画(即它看起来会拉伸到更大的尺寸)?
试试这个:
1) 在故事板中为您的按钮添加 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。
我认为对我来说最好的解决方案是创建另一个已经达到所需大小的 UIButton。当用户按下视图的编辑按钮时,我隐藏了 60x7 的折叠 UIButton。然后我取消隐藏 60x60 的全尺寸 UIButton。为了让过渡动画看起来更自然,我做了以下操作:
[UIView transitionWithView:cell.pencilButtonLeft
duration:0.6
options:UIViewAnimationOptionTransitionFlipFromBottom
animations:NULL
completion:NULL];
cell.pencilButtonLeft.hidden = NO;
至于我尝试关闭自动调整大小时的警告消息,我决定不关闭自动调整大小,也不禁用大小 类。仔细阅读它,只要我不打算 运行 在 iPhone 以外的设备上使用该应用程序,我可能就没问题。感谢@Ptah 对动画的建议