嵌套堆栈视图不会根据大小等级响应更改轴

时间:2016-05-22 17:39:33

标签: ios objective-c size-classes

我有4个简单的视图,我想在iPhone上垂直布局4x1(如果水平紧凑)或水平2x2(如果是任何其他组合)。我还将wC + vC添加为水平2x2,因为iPhone版本是wC + vC。

我的界面构建器布局如下所示:

enter image description here

在“助手”中以横向和纵向显示iPhone 4s的预览时,我得到了我的期望:

enter image description here

然而!当我将模拟器用于任何iPhone并将其置于风景中时,我得到了这个:

enter image description here

无论我尝试什么,我都无法将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]; } 但是没有正确显示。

有没有人知道出了什么问题?

1 个答案:

答案 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