当您在情节提要中“为特质而变化”时,为什么此自动布局扩展失败了?

时间:2019-08-28 17:56:12

标签: xcode autolayout

我实际上为Swift 5.0更新了以下扩展名(在此处找到:Size class specifically for portrait 3.5 inch (iPhone 4S) XCode 6?),并且当修改的约束具有“针对特征变化”属性并且我无法执行时,它可以正常工作,除了 弄清楚为什么?

extension NSLayoutConstraint
{
    //We use a simple inspectable to allow us to set a value for iphoneSE / 5s.
    @IBInspectable var iPhoneSE_PortraitConstant: CGFloat
        {
        set{
            //Only apply value to iphone SE and 5s devices.
             if (UIScreen.main.bounds.size.height < 660 && UIScreen.main.bounds.size.width < 330)
            {
                self.constant = newValue;
            }
        }
        get
        {
            return self.constant;
        }
    }
}

我猜想Xcode首先找到约束,然后他们查看它是否具有Vari for Traits加法,因此忽略了扩展名?我该如何克服?

1 个答案:

答案 0 :(得分:0)

基于快速测试,显示顺序如下:

  • XIB被加载(Storyboard实际上是一个很大的XIB)
  • 应用了用户定义的运行时属性(这将是您的iPhoneSE_PortraitConstant),它设置了约束的 .constant
  • 自动布局可以完成工作
  • 自动布局会根据特征(如果存在)来设置约束的 .constant 设置iPhoneSE_PortraitConstant属性)

因此,如果约束本身具有特征变化,则该扩展将不起作用。

关键是约束本身。

要使这种方法起作用,不要在约束上设置特征变量,而在视图上设置特征变量并具有两个(或更多)单独的约束。然后根据需要在约束上设置iPhoneSE_PortraitConstant