当您在情节提要中“因特性而异”时,为啥此自动布局扩展会失败?
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
。
【讨论】:
以上是关于当您在情节提要中“因特性而异”时,为啥此自动布局扩展会失败?的主要内容,如果未能解决你的问题,请参考以下文章