根据尺寸等级更改视图属性

Posted

技术标签:

【中文标题】根据尺寸等级更改视图属性【英文标题】:Change view properties depending on size class 【发布时间】:2015-03-17 13:59:02 【问题描述】:

我正在为视图控制器设计两个布局,使用两个尺寸类。 对于某些视图,有一些属性我希望根据尺寸类具有不同的值。

例如,有一个标签我需要在一个尺寸等级中居中对齐,但在另一个尺寸等级中右对齐;视图的背景在一个类中应该有一个 alpha/translucency 值,在另一个类中应该有另一个值。

但是,考虑到我当前正在编辑的尺寸等级,似乎无法设置这些属性。如果我在一个类中更改它,它也会反映在其他类中。

是否有适当的方法,或者可能是一种解决方法(以编程方式?)允许我为不同的类设置不同的值?

【问题讨论】:

【参考方案1】:

AFAIK,您可以在 IB 中根据大小类更改的唯一内容是层次结构中的哪些视图、它们的大小/位置和文本字体。

您可以使用self.traitCollection.horizontalSizeClassself.traitCollection.verticalSizeClass 在视图控制器中以编程方式检查大小类,并根据值更改视图属性。

您还需要实现willTransitionToTraitCollection:withTransitionCoordinator: 来处理视图出现后尺寸类可能发生的变化。

【讨论】:

【参考方案2】:

您可以通过检查屏幕的bounds 值并相应地应用更改以编程方式完成:

       if UIScreen.mainScreen().bounds.size.width == 768 
            // iPad, which corresponds to the regular class
            myImage.alpha = 1.0
         else 
            // Every iPhone model, which is the compact class
            myImage.alpha = 0.5
        

或者更准确地说:

        if UIScreen.mainScreen().bounds.size.height == 480 
            // iPhone 4
         else if UIScreen.mainScreen().bounds.size.height == 568 
            // iPhone 5
         else if UIScreen.mainScreen().bounds.size.width == 375 
            // iPhone 6
         else if UIScreen.mainScreen().bounds.size.width == 414 
            // iPhone 6+
         else if UIScreen.mainScreen().bounds.size.width == 768 
            // iPad
        

【讨论】:

以上是关于根据尺寸等级更改视图属性的主要内容,如果未能解决你的问题,请参考以下文章

根据尺寸等级更改约束的乘数

iPhone:使用尺寸类旋转设备时更改背景图像

如何根据动态内容和最大尺寸限制折叠/展开视图?

根据标签栏索引更改视图控制器的属性?

在启用自动布局和大小类的情况下更改视图宽度

如何在 Android 的滚动视图中放大/更改子图像视图尺寸以使图像全尺寸