PassGroupView.xib 생성하고 레이아웃 구성

PassGroupView.swift 생성
class PassGroupView: UIView {
var height: CGFloat? {
didSet {
UIView.animate(withDuration: 0.2) {
self.invalidateIntrinsicContentSize()
}
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.xibSetup()
}
public override var intrinsicContentSize: CGSize {
if let height = height {
return CGSize(width: frame.width, height: height)
} else {
return CGSize(width: frame.width, height: frame.height)
}
}
private func xibSetup(){
guard let xibName = NSStringFromClass(self.classForCoder).components(separatedBy: ".").last else { return }
let view = Bundle.main.loadNibNamed(xibName, owner: self, options: nil)?.first as! UIView
view.frame = self.bounds
self.addSubview(view)
}
}
PassGroupView.xib 에서 File's Owner를 PassGroupView로 지정

PassGroupView를 사용하고싶은 ViewController에 배치.

PassGroupView의 높이를 지정하지않고 Placeholder로 설정함.

뷰컨트롤러에서 PassGroupView의 intrinsicContentSize 수정.
class ViewController: UIViewController {
@IBOutlet weak var passGroupView: PassGroupView!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func actionFold(_ sender: Any) {
passGroupView.height = 41
}
@IBAction func actionUnfold(_ sender: Any) {
passGroupView.height = 82
}
}
실행결과 :


https://medium.com/zenchef-tech-and-product/how-to-visualize-reusable-xibs-in-storyboards-using-ibdesignable-c0488c7f525d