ios - 嵌套堆栈 View 不会响应基于大小类的更改轴

标签 ios objective-c size-classes

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

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

enter image description here

当在 Google 助理中以横向和纵向显示 iPhone 4s 的预览时,我得到了预期的结果:

enter image description here

但是!当我将模拟器用于任何 iPhone 并将其设置为横屏时,我得到以下信息:

enter image description here

无论我尝试什么,我永远无法让 TopStack 和 BottomStack 都显示为水平。如果我删除底部堆栈,顶部变为水平。但是一旦底部堆栈开始起作用,顶部堆栈就不会响应。

我什至在 wC+vC 的代码中尝试过这个:

-(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];
}

当我调试时,我可以验证顶部堆栈实际上在 UILayoutConstraintAxisHorizo​​ntal 中,但没有正确显示。

有没有人知道哪里出了问题?

最佳答案

这可能是 UIStackView 的持续错误。似乎在 iOS 9.0 的 beta 版本中也存在类似的问题,并且在嵌入式 UIStackViews 方面可能仍然存在一些挥之不去的问题:

http://useyourloaf.com/blog/adapting-stack-views-with-size-classes/

按照上面文章中的指示添加以下代码确实解决了这个问题,但代价是屏幕尺寸不可知并失去了一些使 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];
    }
}

可下载Demonstration Xcode Project from here .

关于ios - 嵌套堆栈 View 不会响应基于大小类的更改轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37377519/

相关文章:

objective-c - 如何使 UIView 子类框架在外部不可变

iphone - 检查互联网连接

iphone - Objective-C performSelector 不调用带参数的方法

ios - 设置不同size classes的约束,view不会出现在landscape中

ios - 是否可以为不同大小的 UIImageView 提供不同的图像

ios - 在不降低图像清晰度的情况下,应该给出哪些约束来增加相对于设备屏幕尺寸的 imageview 的尺寸

ios - Objective-C 修改类实例父类(super class)

ios - SKSpriteNode 从屏幕上消失后如何删除或销毁它

ios - KVO 通知间歇性崩溃

iOS:每次 View 消失时,我是否需要从键盘事件中注销导航 Controller ?