Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过约束更新图层后,在@IBDesignable中调用@IBInspectable集合_Ios_Swift_Ibdesignable_Ibinspectable - Fatal编程技术网

Ios 通过约束更新图层后,在@IBDesignable中调用@IBInspectable集合

Ios 通过约束更新图层后,在@IBDesignable中调用@IBInspectable集合,ios,swift,ibdesignable,ibinspectable,Ios,Swift,Ibdesignable,Ibinspectable,我想为UIView创建一个@IBInspectable,使UIView成为一个圆: @IBInspectable var circleBorder: Bool { set { layer.cornerRadius = layer.frame.size.width / 2 } get { return layer.cornerRadius > 0 ? true : false } } 问题是在约束修改其值之前调用了my@IBIn

我想为UIView创建一个@IBInspectable,使UIView成为一个圆:

@IBInspectable var circleBorder: Bool {
    set {
       layer.cornerRadius = layer.frame.size.width / 2
    }
    get {
        return layer.cornerRadius > 0 ? true : false
    }
}
问题是在约束修改其值之前调用了my@IBInspectable,并且设置了错误的转弯半径。
有可能在这里获得约束后的层大小吗?

我认为没有,但有一个更好的方法-暴露角半径

这样,开发人员就可以按照自己的顺序进行操作。在Bool中公开内容意味着在IB中,开发人员需要1创建视图,2添加约束,3更新帧,然后4设置Bool。另外,在Xcode 8中,我猜如果您在IB中更改设备-即使在获得正确的序列之后-事情可能不会正确更新

除非你有一个具体的原因-我想不出来-使这成为一个Bool,这不仅是无害的,它是更可定制的

守则:

@IBInspectable public var cornerRadius:CGFloat {
    get {
        return layer.cornerRadius
    }
    set {
        layer.cornerRadius = newValue
        layer.masksToBounds = newValue > 0
    }
}

是的,我一直在用这个。但我面临的问题是,如果UIView的大小是动态的,并且约束条件改变了,那么拐角半径也必须改变。我明白你的意思。您可能无法100%完成您想要的任务在我看来,这可以归结为IB是一个设计时工具,而完美的圆frame.size.width/2是一个运行时计算。我也遇到了同样的情况——我想根据方向将一组控件从底部向右移动。IB无法处理它,因为无论方向如何,iPad都有相同的尺寸等级。我最终完全抛弃了IB,因为它很容易在代码中完成!