根据尺寸等级更改视图属性
Posted
技术标签:
【中文标题】根据尺寸等级更改视图属性【英文标题】:Change view properties depending on size class 【发布时间】:2015-03-17 13:59:02 【问题描述】:我正在为视图控制器设计两个布局,使用两个尺寸类。 对于某些视图,有一些属性我希望根据尺寸类具有不同的值。
例如,有一个标签我需要在一个尺寸等级中居中对齐,但在另一个尺寸等级中右对齐;视图的背景在一个类中应该有一个 alpha/translucency 值,在另一个类中应该有另一个值。
但是,考虑到我当前正在编辑的尺寸等级,似乎无法设置这些属性。如果我在一个类中更改它,它也会反映在其他类中。
是否有适当的方法,或者可能是一种解决方法(以编程方式?)允许我为不同的类设置不同的值?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于根据尺寸等级更改视图属性的主要内容,如果未能解决你的问题,请参考以下文章