我正在努力应对Autolayout(在新应用中第一次使用它)。
以下情况:
在一个Popover中,我需要根据用户选择以编程方式重新布局8个按钮。这个工作正常,直到按钮必须旋转180°(上下颠倒,这是一个应用程序功能)。
只要我为旋转添加代码,重新布局就不再起作用了。 我不明白为什么我可以改变按钮的位置(如情况2),但是,当它旋转时它不再起作用。
案例1:
按钮0 |按钮1 |按钮2 |按钮3
按钮4 |按钮5 |按钮6 |按钮7
案例2:
BUTTON 7 |按钮6 |按钮5 |按钮4
按钮3 |按钮2 |按钮1 |按钮1
(所有按钮旋转180°,即颠倒翻转)
关闭AutoLayout后,它就像魅力一样。 问题是,一旦我关闭AutoLayout,应用程序的其余部分就完全搞砸了。
如果有人能帮助我理解这个问题,那将会很棒。
代码在viewDidAppear
中for (UIButton *button in self.allButtons) {
if (button.tag == i) {
button.transform = CGAffineTransformMakeRotation(M_PI);
button.frame = CGRectMake((300 - (100 * currentButtonPosition)) + offsetWidthButton, offsetHeightButton, 100, 100);
NSLog(@"Button Tag Nr: %d\nFrame:\nX=%f\nY=%f\nW=%f\nH=%f",button.tag, button.frame.origin.x, button.frame.origin.y, button.frame.size.width, button.frame.size.height);
}
}
按钮的框架坐标在NSLog输出中都是正确的。我想某种方式,button.transform搞砸了.frame = CGRectMake部分,但为什么我不理解,并期待你的帮助或指导,继续研究神秘的autoLayout。
希望解释是可以理解的: - )
谢谢你,祝你有个愉快的一天 罗尼
答案 0 :(得分:1)
如果您正在使用自动布局,则应更改约束,而不是设置按钮的框架。
答案 1 :(得分:1)
在上一个Xcode版本中,错误或意外行为有所改善,但它仍然很混乱。例如,您仍然无法独立地在一个XIB上关闭AutoLayout而不会产生任何后果,尽管在单个XIB上更改其他复选框时不会更改。
您想要做的是:
在关闭AUto Layout之前,根据所有视图中的约束设置帧,删除应用程序中所有视图中的所有约束,然后关闭自动布局。
这当然不那么痛苦,你在IB中设置了约束而不是以编程方式设置约束。
遗憾的是,自动布局仍然远远落后于预期的功能,它们尤其缺乏定义和识别内在位置,甚至在自动设置约束时更糟糕。这是一个广阔的改进领域。