根据大小类更改视图属性

时间:2015-03-17 13:59:03

标签: ios autolayout size-classes

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

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

但是,考虑到我正在编辑的大小类,看起来无法设置这些属性。如果我在一个班级中改变它,它也会反映在其他班级中。

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

2 个答案:

答案 0 :(得分:1)

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

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

您还希望实现willTransitionToTraitCollection:withTransitionCoordinator:以在视图出现后处理大小等级中的可能更改。

答案 1 :(得分:0)

您可以通过检查屏幕的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
        }