当您在情节提要中“因特性而异”时,为啥此自动布局扩展会失败?

Posted

技术标签:

【中文标题】当您在情节提要中“因特性而异”时,为啥此自动布局扩展会失败?【英文标题】:Why does this autolayout extension fail when you "Vary for Traits" in the storyboard?当您在情节提要中“因特性而异”时,为什么此自动布局扩展会失败? 【发布时间】:2019-08-28 17:56:12 【问题描述】:

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

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 是首先找到约束,然后他们查看它是否具有 Vary for Traits 添加,因此忽略了扩展?我怎样才能克服这个问题?

【问题讨论】:

【参考方案1】:

根据快速测试,顺序如下:

XIB 被加载(故事板实际上是一个大的 XIB) 应用用户定义的运行时属性(这将是您的iPhoneSE_PortraitConstant),它设置约束的.constant 自动布局发挥作用 自动布局根据 Traits 设置约束的 .constant,如果它们存在(它确实 设置iPhoneSE_PortraitConstant 属性)

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

那里的关键是约束本身

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

【讨论】:

以上是关于当您在情节提要中“因特性而异”时,为啥此自动布局扩展会失败?的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器中看不到情节提要中的元素

使用自动布局时标签不会调整大小,情节提要中的约束

使用情节提要时如何使用摇动手势?

情节提要已损坏

无法在情节提要中启用自动布局

如何在情节提要中使用带有一行按钮的自动布局[重复]