我正在使用自动布局,我想以编程方式访问控件,从纵向到横向,
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
UIButton *btnLogin = (UIButton*)[self.view viewWithTag:100];
btnLogin.frame = CGRectMake(300, 150, 437, 91);
}
else
{
UIButton *btnLogin = (UIButton*)[self.view viewWithTag:100];
btnLogin.frame = CGRectMake(162, 540, 437, 91);
}
}
调试器进入代码但按钮的框架没有改变。这是否可以使用自动布局?
答案 0 :(得分:0)
本文非常好地解释了涉及自动布局时的布局过程:http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html
基本上,在每个布局循环上(不要忘记所有视图布局不是连续过程而是基于主线程运行循环的离散过程),当打开自动布局时,系统会评估所有约束,然后应用它们来构建最终布局。
覆盖此机制所需的唯一更改是先通过调用“super”更改layoutSubviews
视图控制器实现,然后再更新帧。
然而,这不是一个好的做法,你应该只在使用自动布局无法达到相同效果时使用它,或者因为使用自动布局这样做会影响性能。所以谨慎使用它。这里还解释了这种技术:http://oleb.net/blog/2014/03/how-i-learned-to-stop-worrying-and-love-auto-layout/
看看你的例子,似乎你试图将按钮放在iPad纵向和横向之间的完全不同的位置,所以可能你不能使用自动布局,但考虑到你仍然可以链接顶部和前缘您的按钮到引用(例如视图控制器视图),然后更新这些约束:如果没有其他对象被约束到此按钮,则操作不是计算密集型的,您仍然可以使用自动布局。