在Storyboards(iOS)中为特定大小类添加/删除约束

时间:2015-11-01 02:26:52

标签: ios objective-c autolayout ios9 size-classes

我有几个问题与在UICollectionViewCell中添加/删除特定大小类的约束有关。

  1. 我有一个带有单元格设计的集合视图,用于紧凑和规则 - 宽度和任意高度。我添加了适当的约束和它在所有设备上都没有问题。但默认情况下,故事板显示(任意,任何)大小等级&我没有在这里设置任何约束,因此它显示错误。我想要忽略这些错误吗?如果没有,我该如何解决?

  2. 当我以编程方式定义委托中集合视图项的大小时,我需要在应用程序处于iOS 9拆分视图(50-50)和放大器时使大小更改的集合布局无效。旋转。这不贵吗?我可以优化吗?注意:水平类在此处不会更改。

2 个答案:

答案 0 :(得分:1)

  1. 不幸的是,Xcode不够智能,无法确定您是否涵盖了所有大小类排列(您可能需要file a bug report)。此时的最佳做法是选择您认为是“默认”布局并将其实现为Any / Any size类。例如,如果您确定默认行为是Compact / Any布局,则可以将其实现为Any / Any,并将特定实现放入Regular / Any。

  2. 听起来好像在这种情况下要求集合视图布局无效。根据您正在显示的内容,它可能会很昂贵,但如果您的所有项目都在改变大小,那么您没有太多选择。话虽如此,如果只有部分布局无效,您可以使用invalidateLayoutWithContext(_:)代替invalidateLayout来专门调出无效的内容。你可以read more about it here。同样值得注意的是,iPhone 6+和iPhone 6s +的水平尺寸等级在旋转时会发生变化(纵向中的紧凑和横向中的常规)。

答案 1 :(得分:0)

嗯,对于我的问题的第一部分,理想情况下我们应该有一个与Charles上面说的一致的设计。但在我的情况下,我有一个明确的区别紧凑和&常规宽度设计。因此,我想出的解决方案是在集合视图单元格下禁用(卸载)我的子视图(any,any)。当我处理两者(紧凑,任何)和& (常规,任何)这似乎是一种合理的方法。对于第二部分,我仍然像前面提到的那样使布局无效。