繁体   English   中英

通过接口构建器将xib的自定义视图添加到控制器-保留自动布局约束并根据其调整大小

[英]Custom view from xib added to controller via Interface builder - keep autolayout constraints and resize by them

我创建了自定义UIView子类,该子类应作为弹出对话框使用。 我想非常可重用,所以我在自己的xib文件中创建了子类,并在其中设置了自动布局约束。 在界面生成器中,它看起来像这样:

PhotoDetailInfoDialog.xib

它应该通过UITextView中的文本来调整高度。 这是我的自定义子类:

class PhotoDetailInfoDialog: UIView {

  var view: UIView!

  let nibName: String = "PhotoDetailInfoDialog"

  @IBOutlet weak var titleLabel: UILabel!
  @IBOutlet weak var mainTextView: UITextView!
  @IBOutlet weak var bottomButton: UIButton!

  override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
  }

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
  }

  func setup() {
    view = loadViewFromNib()

    view.frame = bounds
    view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]

    addSubview(view)
  }

  func loadViewFromNib() -> UIView {
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: nibName, bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    return view
  }
}

在要使用控制器的接口构建器中,我添加了视图并将类设置为我的PhotoDetailInfoDialog。

使用PhotoDetailInfoDialog的界面生成器中的控制器

(在截屏后,我添加了宽度限制)。 如何正确设置在自定义视图的控制器高度中,将通过自定义xib中的约束来动态地重新计算(可能在界面生成器中没有错误)?

就我而言,我在代码中为UITextView设置了多行文本,但它显示如下: 现在运行时的样子

感谢帮助

你可以不设置view的类将customView已经有.xib这在你的storyboard

因为在xib ,它已经创建interfacePhotoDetailInfoDialog

如果将view拖到storyboard PhotoDetailInfoDialog ,并将类设置为PhotoDetailInfoDialog ,则会出现issue 并且您可以再次运行您的项目,它将以EX_BAD_ACCESS崩溃。

我建议您在vc的代码中使用PhotoDetailInfoDialog程序。 并且可能更灵活地显示带有条件或动作的dialog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM