我有4个简单的视图,我想在iPhone上垂直布局4x1(如果水平紧凑)或水平2x2(如果是任何其他组合)。我还将wC + vC添加为水平2x2,因为iPhone版本是wC + vC。
我的界面构建器布局如下所示:
在“助手”中以横向和纵向显示iPhone 4s的预览时,我得到了我的期望:
然而!当我将模拟器用于任何iPhone并将其置于风景中时,我得到了这个:
无论我尝试什么,我都无法将TopStack和BottomStack显示为水平。如果我删除底部堆栈,顶部变为水平。但是一旦底部筹码发挥作用,顶部筹码堆就没有响应。
我甚至在wC + vC的代码中尝试了这个:
print (df > 0)
A B C
0 False True True
1 True True False
2 False True False
3 True True True
print (df < 0)
A B C
0 True False False
1 False False True
2 False False False
3 False False False
df[df > 0] = 1
df[df < 0] = -1
print (df)
A B C
0 -1 1 1.0
1 1 1 -1.0
2 0 1 NaN
3 1 1 1.0
}
当我调试时,我可以验证顶部堆栈实际上是-(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
if( self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact && self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact ) {
[self.TopStack setAxis:UILayoutConstraintAxisHorizontal];
[self.BottomStack setAxis:UILayoutConstraintAxisHorizontal];
} else {
[self.TopStack setAxis:UILayoutConstraintAxisVertical];
[self.BottomStack setAxis:UILayoutConstraintAxisVertical];
}
但是没有正确显示。
有没有人知道出了什么问题?
答案 0 :(得分:1)
这可能是UIStackView
的持续错误。在iOS 9.0的测试版中似乎存在类似的问题,并且在嵌入式UIStackViews
方面可能仍存在一些挥之不去的问题:
http://useyourloaf.com/blog/adapting-stack-views-with-size-classes/
如上文所述添加以下代码确实可以解决此问题,但代价是屏幕大小无关,并且失去了一些使大小类有用的内容:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
if (size.width > size.height)
{
[self.topStack setAxis:UILayoutConstraintAxisHorizontal];
[self.bottomStack setAxis:UILayoutConstraintAxisHorizontal];
}
else
{
[self.topStack setAxis:UILayoutConstraintAxisVertical];
[self.bottomStack setAxis:UILayoutConstraintAxisVertical];
}
}
可以下载演示Xcode项目from here。