1

我正在努力使用自动布局(第一次在新应用程序中使用它)。

以下情况:

  • 故事板
  • iPad
  • 启用自动布局

在一个 Popover 中,我需要根据用户选择以编程方式重新布局 8 个按钮。这工作正常,直到按钮必须旋转 180°(要倒置查看,这是一个应用程序功能)。

一旦我添加了轮换代码,重新布局就不再起作用了。我不明白为什么我可以更改按钮的位置(如案例 2),但是,旋转时它不再起作用。

情况1:

按钮 0 | 按钮 1 | 按钮 2 | 按钮 3
按钮 4 | 按钮 5 | 按钮 6 | 按钮 7

案例二:

按钮 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 部分,但为什么我不明白并期待您的帮助或指导,继续研究神秘的自动布局。

希望解释是可以理解的:-)

谢谢,祝你有美好的一天罗尼

4

2 回答 2

1

上一个 Xcode 版本中的错误或意外行为有所改进,但仍然很混乱。例如,您仍然无法在一个 XIB 上独立关闭 AutoLayout 而不会产生任何后果,尽管在单个 XIB 上更改时其他复选框不会更改。

你想要做的是:

在关闭自动布局之前,根据所有视图中的约束设置框架,删除应用程序中所有视图中的所有约束,然后关闭自动布局。

这当然不那么痛苦,你们在 IB 中设置了约束,而不是以编程方式。

不幸的是,自动布局仍然远远落后于预期的功能,它们尤其缺乏定义和识别内在位置,甚至在自动设置约束方面更差。这是一个很大的改进领域。

于 2013-10-16T06:49:36.440 回答
1

如果您使用自动布局,您应该更改约束,而不是设置按钮的框架。

于 2013-05-27T11:02:11.117 回答