ios - @IBInspectable : wrong bounds and frames at runtime when I add subviews

标签 ios uiview frame ibinspectable

这是我的@IBInspectable:代码:

@IBDesignable
class PBOView: UIView {
    @IBInspectable var borderRightColor: UIColor? {
        didSet {
            let borderRightView = UIView(frame: CGRectMake(frame.size.width - 10, 0, 10, frame.size.height))
            borderRightView.backgroundColor = borderRightColor

            addSubview(borderRightView)
        }
    }
}

这是 Storyboard 中的结果:

UIView 的宽度是 150 enter image description here

在 iPhone 模拟器中: UIView 的宽度是150,但因为是iPhone 应该是80这就是为什么矩形在我的自定义 View 中不可见的原因 enter image description here

当我将 clearColor 设置为我的 View 背景时,结果如下: enter image description here

为什么该 UIView 的边界和框架宽度错误?实际上它们是 Storyboard的宽度,而不是运行时的真实宽度。

最佳答案

我正在挖掘一些,但我还没有找到优雅的属性或方法来解决这个问题。到目前为止唯一的方法是:

@IBDesignable
class PBOView: UIView {

    var borderRightView: UIView?

    @IBInspectable var borderRightColor: UIColor? {
        didSet {
            addBorderRightView()
        }
    }

    func addBorderRightView() {

        borderRightView = UIView(frame: CGRectMake(frame.size.width - 10, 0, 10, frame.size.height))
        borderRightView!.backgroundColor = borderRightColor
        addSubview(borderRightView!)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        if let borderRightView = borderRightView {
            borderRightView.removeFromSuperview()
        }
        if let borderRightColor = borderRightColor {
            addBorderRightView()
        }
    }
}

只需用您自己的内容覆盖 layoutSubviews() 方法。由于 layoutSubviews() 几乎在任何地方都被调用,所以它可以正常工作。

结果是:

enter image description here

仍在寻找优雅的解决方案 - 适合我的方法。

关于ios - @IBInspectable : wrong bounds and frames at runtime when I add subviews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30031753/

相关文章:

ios - 页面消失时删除长时间运行的动画

ios - 如何检查我的 NavigationController 子类是否已进行 VC 的推送和弹出?

objective-c - 获取 UIView 中的所有对象?

ffmpeg - 如何使用 ffmpeg 进行框架切换?

javascript - 强制 iframe 加载全帧

ios - 关闭 FSCalendar 中过去的日期

ios - 频繁写入的 iOS 上的 mmap 性能

java - 如何完全关闭/删除 JFrame

ios - iOS中10位电话号码的正则表达式

objective-c - 移动 MKOverlayPathView 消失在瓷砖后面