支持AutoLayout和传统布局

时间:2013-04-04 06:03:49

标签: iphone ios uibutton autolayout autoresizingmask

我有一个UIButton的自定义子类,我想在多个项目中重复使用,其中一些使用界面构建器和故事板,其中一些可能没有。它涉及在几个地方设置按钮的框架。

如果我添加

    self.translatesAutoresizingMaskIntoConstraints = YES;

在初始化中,一切看起来都正常,但是,我得到了:

Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
Will attempt to recover by breaking constraint…etc

登录到控制台。但是,如果我设置

    self.translatesAutoresizingMaskIntoConstraints = NO;

没有按钮大小调整工作,按钮完全坏了。

有没有办法可以抑制错误,因为它似乎会降低到正确的范围,或者我可以以某种方式手动删除有问题的约束?

我已经尝试在初始化按钮后转储约束,但是,它似乎不包含AutoLayout最终破坏的约束。

编辑:下面是示例项目的链接,然后是我的按钮代码。在故事板中关闭自动布局时效果很好,但是,当打开自动布局时,按钮似乎位于原点(似乎是因为调用initWithCoder时,按钮没有超视图或任何位置信息)。

http://www.kudit.com/dump/KFB.zip

http://www.kudit.com/dump/KuditConfirmButton.zip

1 个答案:

答案 0 :(得分:0)

您的猜测是正确的,因为当从故事板初始化按钮时(使用initWithCoder :),帧为零 - 这对于使用autolayout的视图是预期的 - 帧直到稍后才被分配。

我让你的示例项目主要在autolayout下工作,创建一个名为hasSetup的布尔值,在setup方法中设置为YES。如果帧为零,则不会运行设置方法。我也是从layoutSubviews再次打电话给我。这可以解决故事板问题中无法使用的自动布局。

但是各个层的尺寸仍然不正确。您可能希望从layoutSubviews中调整它们的大小。

您也无法在自动布局下使用setFrame - 您需要确保对视图的任何约束(例如故事板中的大小限制)进行调整。处理这两种可能性会变得非常混乱。

他们看起来非常好 - 希望在你对这些问题进行分类时在GitHub上看到它们。