1

我有一个 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

4

1 回答 1

0

您的猜测是正确的,因为当从情节提要(使用 initWithCoder:) 初始化按钮时,框架为零 - 对于使用自动布局的视图,这是预期的 - 直到稍后才会分配框架。

通过创建一个名为 hasSetup 的布尔 ivar,我的示例项目主要在自动布局下工作,它在 setup 方法中设置为 YES。如果帧为零,则设置方法不会运行。我也从 再次调用它layoutSubviews。这解决了故事板问题中使用自动布局时不工作的问题。

但是,各个层的大小仍然不正确。您可能需要考虑从 layoutSubviews 调整它们的大小。

您也不能setFrame在自动布局下使用 - 您需要确保调整视图上的任何约束(例如情节提要中的大小约束)。处理这两种可能性会变得非常混乱。

不过它们看起来确实不错——希望在您整理完这些问题后在 GitHub 上看到它们。

于 2013-04-04T19:30:04.307 回答