【问题标题】:Change view properties depending on size class根据尺寸等级更改视图属性
【发布时间】:2015-03-17 13:59:02
【问题描述】:
我正在为视图控制器设计两个布局,使用两个尺寸类。
对于某些视图,有一些属性我希望根据尺寸类具有不同的值。
例如,有一个标签我需要在一个尺寸等级中居中对齐,但在另一个尺寸等级中右对齐;视图的背景在一个类中应该有一个 alpha/translucency 值,在另一个类中应该有另一个值。
但是,考虑到我当前正在编辑的尺寸等级,似乎无法设置这些属性。如果我在一个类中更改它,它也会反映在其他类中。
是否有适当的方法,或者可能是一种解决方法(以编程方式?)允许我为不同的类设置不同的值?
【问题讨论】:
标签:
ios
autolayout
size-classes
【解决方案1】:
AFAIK,您可以在 IB 中根据大小类更改的唯一内容是层次结构中的哪些视图、它们的大小/位置和文本字体。
您可以使用self.traitCollection.horizontalSizeClass 和self.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
}