【问题标题】:Vary User Defined Runtime Attributes for Traits为 Traits 改变用户定义的运行时属性
【发布时间】:2017-07-14 11:38:05
【问题描述】:

我使用Storyboard 创建了一个带有圆角的视图。但是我想为iPhone 删除它。我正在使用用户定义的运行时属性来完成这项工作,我想知道是否可以为iPhone 做一个变体。

编辑:我知道我可以在代码中做到这一点,但这听起来很傻,因为它是可视化的,而且故事板文件听起来是做这种变化的正确位置。

【问题讨论】:

  • 那么您是否尝试仅对某些设备/平台使用运行时属性?
  • 是的,我希望使用“Vary for Traits”将这些属性仅用于某些变体(就像您可以使用约束一样)
  • 目前在 XCode 中似乎不可能。我尝试手动将变体键复制到 XCode 中情节提要 XML 中的 userDefinedRuntimeAttributes 键中,并且代码似乎被忽略了,当我重新加载情节提要时,XCode 将其删除。仅在代码中执行此操作可能更容易。
  • 我是这么认为的,但这听起来很奇怪,因为这些是视图的属性,您应该能够使用情节提要来定义它们。

标签: ios iphone swift xcode uiview


【解决方案1】:

我认为故事板不可能。您可以在加载特定视图并覆盖属性时在代码中检查设备类型。

例如

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if UIDevice.current.model == "iPhone" {
        // reset attributes
    }
}

【讨论】:

    【解决方案2】:
    extension CALayer {
        var borderUIColor: UIColor {
            set {
                if UIDevice.current.model == "iPhone" {
                    self.borderColor = newValue.cgColor
                }
                // do whatever you want
            }
            get {
                return UIColor(cgColor: self.borderColor!)
            }
        }
    }
    

    然后使用 layer.borderUIColor 访问属性。

    写一个扩展,重新定义属性,在set方法中判断设备类型就可以解决这个问题!希望这能解决您的问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多