我在UIButtons
中有4个static cell
,宽度为constraints
,并且对所有4个边都有常规约束。
在某个时刻,我想更改constraints
宽度。这是我的代码:
- (void)viewDidLoad {
[super viewDidLoad];
self.constraintArray = [[NSArray alloc] initWithObjects:self.budgetWidthConstraint, self.categorieWidthConstraint, self.extraButtonWidthConstraint, nil];
}
- (void)myLayout
{
CGFloat cellWidth = self.thirdCell.frame.size.width;
[self.constraintArray[2] setConstant:cellWidth / 6];
[self.constraintArray[1] setConstant:cellWidth / 6];
[self.constraintArray[0] setConstant:cellWidth / 3];
}
- (void)myAction {
[self myLayout];
}
问题是,当simulators
方向发生变化时,buttons
宽度不会改变为它们应该的大小。我必须再次致电myAction
,以便buttons
按照自己的意愿进行布局。我累了从myLayout
致电viewDidLayoutSubviews
:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self myLayout];
}
但这不起作用,我没有任何错误。
更新1:
Constraint
宽度从这样开始:
constraintArray[1] = 62.500000
constraintArray[2] = 62.500000
constraintArray[3] = 125.000000
旋转设备时:
constraintArray[1] = 62.500000
constraintArray[2] = 62.500000
constraintArray[3] = 80.500000
轮换后应该是什么:(或在我致电myAction
之后)
constraintArray[1] = 55.083333
constraintArray[2] = 55.083333
constraintArray[3] = 110.000000
更新2:
以下是指向具有相同问题的类似项目的链接:Project
答案 0 :(得分:1)
我只是查看你的项目。我知道你已经错误地实现了它。请参阅约束对边距的影响。在这里所有按钮都没有得到适当的保证金。
此外,您已将等宽度应用于100导致问题。 您的第二个和第三个视图大小相同,但您的第四个视图大小不同。
要解决此问题,您应该在第四个按钮后再按一个按钮(第五个按钮)。 现在在视图中添加第二个和第三个视图,在视图内添加第四个和第五个视图。并为第一个按钮,第二个视图和第三个视图指定相等的宽度。现在改变方向它不会引起问题。你应该更新第四和第五个按钮,如第二个和第三个。
答案 1 :(得分:0)
要在父视图调整大小时调整按钮大小,请不要设置宽度约束。而是设置它们的前导和尾随约束,这将使它们的宽度变得灵活。
如果需要以编程方式更改宽度,请调整前导或尾随约束。
要使宽度相等,请按比例设置"等宽度"约束并设置其乘数(例如乘数= 2表示一个是另一个的两倍)。
然后,如果您需要隐藏按钮,请给出宽度约束以及等宽度约束,但将宽度约束优先级设置为1并将等宽度约束优先级设置为999.您可以通过以编程方式隐藏/显示按钮交换这些约束的优先级