2015-05-04 28 views
3

這是我的@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) 
     } 
    } 
} 

這是導致故事板:

的UIView的寬度150 enter image description here

and in iPhone Simulator: UIView的寬度爲150,bu t應該是80,因爲它是iPhone。 這就是爲什麼矩形是不可見的在我的自定義視圖 enter image description here

當我設置clearColor到我的意見的背景下,其結果如下: enter image description here

爲什麼有一個錯誤的界限和幀的寬度爲那個UIViews?實際上它們是從Storyboard的寬度而不是real在運行時的寬度。

回答

0

我正在挖一些,但我還沒有找到優雅的屬性或方法來解決這個問題。唯一的辦法,到目前爲止是:

@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

還在尋找優雅解決方案 - 方法爲我做到這一點。

-1

試試這個: 子視圖的框架應該等於placeHolder的邊界。 即

subView.frame = placeholder.bounds; 
相關問題