2015-05-04 2 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

и в iPhone Simulator: Ширина UIView равна 150, bu t должен быть 80, так как это iPhone. Поэтому прямоугольники не видны в моих пользовательских представлений enter image description here

Когда я установил clearColor на фоне моих взглядов, результат следующий: enter image description here

Почему есть неправильные оценки и ширины кадров для этих UIViews? На самом деле это ширина от раскадровки, а не 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

Попробуйте следующее: Рамка subView должна быть равна рамке placeHolder. i.e

subView.frame = placeholder.bounds;