【问题标题】:IBDesignable rendering NSLayoutConstraint subclassIBDesignable 渲染 NSLayoutConstraint 子类
【发布时间】:2017-01-29 17:09:28
【问题描述】:

我开发了一个DeviceLayoutenter link description here

这个库提供DeviceLayoutConstraint 来设置每个设备大小的 AutoLayout 常量

import UIKit

import Device
class DeviceLayoutConstraint: NSLayoutConstraint {

    @IBInspectable var inch3_5: CGFloat = 0.0 { didSet { updateConstant(size: .screen3_5Inch, constant: inch3_5)}}
    @IBInspectable var inch4: CGFloat = 0.0 { didSet { updateConstant(size: .screen4Inch, constant: inch4)}}
    @IBInspectable var inch4_7: CGFloat = 0.0 { didSet { updateConstant(size: .screen4_7Inch, constant: inch4_7)}}
    @IBInspectable var inch5_5: CGFloat = 0.0 { didSet { updateConstant(size: .screen5_5Inch, constant: inch5_5)}}
    @IBInspectable var inch7_9: CGFloat = 0.0 { didSet { updateConstant(size: .screen7_9Inch, constant: inch7_9)}}
    @IBInspectable var inch9_7: CGFloat = 0.0 { didSet { updateConstant(size: .screen9_7Inch, constant: inch9_7)}}
    @IBInspectable var inch12_9: CGFloat = 0.0 { didSet { updateConstant(size: .screen12_9Inch, constant: inch12_9)}}

    fileprivate func updateConstant(size: Size, constant: CGFloat) {
        if size == deviceSize() {
            self.constant = constant
            layoutIfNeeded()
        }
    }

    open func deviceSize() -> Size {
        return Device.deviceSize
    }

    open func layoutIfNeeded() {
        self.firstItem.layoutIfNeeded()
        self.secondItem?.layoutIfNeeded()
    }
}

fileprivate extension Device {
    static let deviceSize = Device.size()
}

在运行时模拟器或设备中应用的每个设备常量属性

我的问题是

选择设备时是否可以使用 IBInspectable 或 IBDesignable 更新渲染?

我想在设备类型更改时检查 Storyboard 或 Xib 文件中的渲染

【问题讨论】:

  • 完全不相关,但我不确定我是否建议在updateConstraint 中调用layoutIfNeeded。我可能会打电话给setNeedsLayout。如果你碰巧更新了一堆常量,你不想触发太多冗余的布局循环。
  • 克鲁兹你有没有得到这个答案?
  • @Cruz:有更新吗?

标签: ios autolayout nslayoutconstraint ibdesignable ibinspectable


【解决方案1】:

是的,约束(无论是您的子类还是标准约束)与可设计视图完全兼容。显然,它要求您的 @IBDesignable 视图正确处理大小变化,但我们通常会这样做。

例如,如果您有一个添加圆形CAShapeLayer 的可设计视图,您将在适当的init 方法中添加一次且仅一次的CAShapeLayer,但在layoutSubviews 方法。例如,请参阅CircleView

但是,如果您正确处理尺寸布局更改,您也会自动正确处理约束。

【讨论】:

  • 嘿 Rob,你能解释一下如何将它与 NSLayoutConstraint 子类一起使用吗?
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
相关资源
最近更新 更多