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

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

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

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

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

【问题讨论】:

    标签: ios autolayout size-classes


    【解决方案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
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        相关资源
        最近更新 更多