【问题标题】:Set Constraints Programatically Of An XIB File in Swift在 Swift 中以编程方式设置 XIB 文件的约束
【发布时间】:2023-04-04 12:32:01
【问题描述】:

如何在超级视图底部附加XIB文件

我有一个名为“xibFIleView”的 XIB 文件

我调用XIB View的代码是:-

 override func viewDidLoad() {
        super.viewDidLoad()

       self.view.addSubview(instanceFromNib())
    }

    func instanceFromNib() -> xibFIleView {

        return UINib(nibName: "xibFileView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! xibFIleView
    }
}

当我运行我的项目时,我的模拟器显示:-

我们如何在超级视图的底部附加 XIB 视图。

【问题讨论】:

  • 您尝试过我发布的解决方案吗?
  • 是的,它对我有用,谢谢@Bhaumik

标签: ios swift xcode uikit xib


【解决方案1】:

您可以通过将constraintsframe 设置为您的xibView 来实现此目的。

设置约束:

override func viewDidLoad() {
    super.viewDidLoad()

    let xibView = instanceFromNib()
    self.view.addSubview(xibView)
    xibView.translatesAutoresizingMaskIntoConstraints = false
    let constraint_leading = NSLayoutConstraint(item: xibView, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 0)
    let constraint_bottom = NSLayoutConstraint(item: xibView, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .bottom, multiplier: 1, constant: 0)
    let constraint_height = NSLayoutConstraint(item: xibView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .height, multiplier: 1, constant: xibView.frame.height)
    let constraint_width = NSLayoutConstraint(item: xibView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .width, multiplier: 1, constant: xibView.frame.width)
    self.view.addConstraint(constraint_leading)
    self.view.addConstraint(constraint_bottom)
    xibView.addConstraint(constraint_height)
    xibView.addConstraint(constraint_width)
}

----- 或 -----

设置框架:

在您的viewDidLoad() 中进行以下更改:

override func viewDidLoad() {
    super.viewDidLoad()

    let xibView = instanceFromNib()
    let y_pos = self.view.frame.height - xibView.frame.height
    xibView.frame = CGRect(x: 0, y: y_pos, width: xibView.frame.width, height: xibView.frame.height)
    // change x, y, width, height based on your requirement.
    self.view.addSubview(xibView)
}

注意:根据您的要求更改 x、y 位置和宽度、高度。

【讨论】:

    【解决方案2】:

    使用自动布局添加 4 个足以指定子视图宽度、高度、x 和 y 位置的约束。例如:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        let child = instanceFromNib()
        self.view.addSubview(child)
        NSLayoutConstraint.activate([
            child.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            child.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            child.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            child.heightAnchor.constraint(equalToConstant: 300) // <- Your desired view height here
        )]
    }
    
    func instanceFromNib() -> xibFIleView {
    
        return UINib(nibName: "xibFileView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! xibFIleView
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      相关资源
      最近更新 更多