2013-04-04 111 views
1

我有一个UIButton的自定义子类,我想在多个项目中重用,其中一些使用界面生成器和故事板,其中一些可能不会。它涉及在几个地方设置按钮的框架。支持AutoLayout和传统布局

如果我在初始化添加

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

+0

我还没有找到一种方法来做到这一点,而不是手动设置'翻译...'属性取决于使用的布局的类型。你如何添加你的按钮 - 作为xib/storyboard或代码中的一部分? – jrturton 2013-04-04 06:29:29

+0

作为故事板的一部分。我想设计这个类,以便我可以在IB中替换类,并使用IB和运行时属性进行自定义,以制作简单的可重用的插入式解决方案。 – Gujamin 2013-04-04 15:27:48

+0

你可以编辑问题来显示你的一些代码吗?特别是任何你创建约束的代码。我假设你在按钮内部创建约束?您可以在非自动布局视图内放置自动布局视图,反之亦然,但如果尝试限制自动视图视图,则会出现问题。从现在的情况来看,从你的问题来看你不清楚你正在做什么。 – jrturton 2013-04-04 16:05:51

回答

0

你的猜测是正确的,因为当按钮从故事板初始化(使用的initWithCoder :)帧是零 - 这是预期的视图中使用自动布局 - 帧别直到稍后再分配。

我有你的示例项目主要是通过创建一个名为hasSetup的boolean ivar在自动布局下工作,它在setup方法中设置为YES。如果帧为零,则设置方法不运行。我也从layoutSubviews再次调用它。这样可以避免在故事板问题中使用autolayout时不工作。

虽然各层仍然不是正确的大小。您可能想要从layoutSubviews调整它们的大小。

您也不能在自动布局下使用setFrame - 您需要确保您的视图上的任何约束(如来自故事板的尺寸限制)被调整。处理两种可能性会变得非常混乱。

他们看起来确实不错 - 希望在排序这些问题时在GitHub上看到他们。

+0

那么有没有办法检测自动布局?会查询.constraints工作?而且,当以编程方式与IB相加时,似乎存在问题。对此有何想法? – Gujamin 2013-04-05 17:17:07

+0

以编程方式添加,您必须根据您使用的布局手动设置。从故事板/ xib中,似乎有意义(尽管我没有测试过),根据故事板的Autolayout状态适当地设置该标志。 – jrturton 2013-04-05 21:16:02

+0

你能指出哪里可以通过代码访问这个“标志”吗?我没有在'UIStoryboard'或'UIView'上看到任何“usesAutolayout”标志。 – Gujamin 2013-05-09 14:17:22