Xcode 根据大小类别查看属性

Xcode 根据大小类别查看属性,xcode,ios9,uistackview,Xcode,Ios9,Uistackview,我尝试在故事板中测试UIStackView,根据iPhone的方向(wAny/hC、wC/hR)更改属性“Axis” 不幸的是,在运行时,没有应用更改。 具体来说,属性“Axis”已修改(在Xcode中检查),但布局不会更改 提前感谢您的帮助。这肯定是一个bug。在仔细检查后,轴在运行时(模拟器或设备)的行为仅在视图层次结构中的每个其他视图中发生变化 我还没有尝试过所有可能的排列,但这正是我发现的,因为只有在我想引入多个堆栈视图并具有所需的轴更改行为时,才会出现这个问题。在某些情况下,单堆栈视图

我尝试在故事板中测试UIStackView,根据iPhone的方向(wAny/hC、wC/hR)更改属性“Axis”

不幸的是,在运行时,没有应用更改。 具体来说,属性“Axis”已修改(在Xcode中检查),但布局不会更改


提前感谢您的帮助。

这肯定是一个bug。在仔细检查后,轴在运行时(模拟器或设备)的行为仅在视图层次结构中的每个其他视图中发生变化

我还没有尝试过所有可能的排列,但这正是我发现的,因为只有在我想引入多个堆栈视图并具有所需的轴更改行为时,才会出现这个问题。在某些情况下,单堆栈视图可能不符合大小类规则,但我没有可靠地复制它

查看my,它通过垂直排列的8个视图元素清楚地说明了这个问题。它们的配置都是完全相同的,只是它们的位置相互之间和屏幕顶部受到限制

正如您从故事板预览中所看到的,在景观中,事物看起来就像我们想要和期望的那样:

在模拟器或设备上运行时,情况就不同了。在对许多堆栈视图进行试验后,很明显,该错误会影响视图层次结构中的每个其他堆栈视图

尽管在上面的评论中提到了另一个RDAR,我还是用这个示例项目提出了自己的RDAR。我找不到它的公开记录

显然,有一种基于代码的解决方法是痛苦的,完全违背了自动布局、约束和大小类的目的。这对我来说是一个相当大的bug,因为它消除了堆栈视图和大小类的一个相当大的用例

根据EinharchartPlus在苹果开发者论坛上的代码解决方案:

顺便说一句:覆盖viewwilltransitionosize并手动设置不同的参数可以解决这个问题,但这很烦人,因为我们还需要在代码中检查视图,这应该与设计完全相关

如果这还不完全清楚,您需要有一个对非协作堆栈视图的IBOutlet引用,可能还有它在视图控制器代码中填充的视图。您可以更改堆栈视图的轴属性,理想情况下,还可以更改其中包含的高度:

@IBOutlet weak var viewHackStack: UIView!
@IBOutlet weak var hackStackView: UIStackView!

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    if(self.traitCollection.verticalSizeClass == .Compact) {
        self.viewHackStack.frame.size.height = 25
        self.hackStackView.axis = .Horizontal
    }
    else if(self.traitCollection.verticalSizeClass == .Regular) {
        self.viewHackStack.frame.size.height = 50
        self.hackStackView.axis = .Vertical
    }
}
如果您想更具体地使用决定行为更改的size类,只需使用trait集合size类类型,直到满足所需的条件


如果我在bug修复时间表上听到任何消息,我会在这里发布。在此之前,我希望这能帮助解决问题。

这可能会给Thx带来一些帮助,这似乎是一个bug:是的,我也有这个问题(上面是我的帖子:),另一位论坛成员提出了rdar,并对此进行了确认。虽然我找不到他养的虫子。。。我还注意到,手动更改trait集合回调中的
轴也不起作用。。。但请注意,在iPad上使用拆分视图时,这很好!Rich,如果将trait集合回调中的轴分派到主队列,则更改该轴会起作用:
dispatch\u async(dispatch\u get\u main\u queue()){…}