ios - 如何使用 Visual Formate Language 为 xib 文件设置约束

标签 ios swift constraints ios-autolayout visual-format-language

我为自定义导航 Controller 创建了 xib 文件,在该 xib 文件中我有 3 个 UIButtons 和 1 个 UILabel。 在运行时,我会将这个 xib 文件指定为导航 Controller 。 我需要在 ViewController 中使用 VFL(视觉格式语言)设置约束。

   let tempView = Bundle.main.loadNibNamed("CustomNavigation", owner: self, options: nil)?.first as! CustomNavigationView
    self.view.addSubview(tempView)

    tempView.backgroundColor = UIColor.lightGray
    //tempView.frame = CGRect(x: 0, y: 0, width:width, height: 64)

    let backBtn = tempView.back as UIButton
    let naviTitle = tempView.naviTitle as UILabel
    let bell = tempView.bell as UIButton
    let order = tempView.order as UIButton

我需要为 backBtn、naviTitle、bell、order 设置约束。我这样设置约束

let views = ["backBtn": backBtn,
                 "naviTitle": naviTitle,
                 "order": order] as [String : AnyObject]

    let iconVerticalConstraints = NSLayoutConstraint.constraints(
        withVisualFormat: "V:|-20-[backBtn(60)]",
       options: [],
        metrics: nil,
        views: views)
    allConstraints += iconVerticalConstraints



    let nameLabelVerticalConstraints = NSLayoutConstraint.constraints(
        withVisualFormat: "V:|-23-[naviTitle]",
        options: [],
        metrics: nil,
        views: views)
    allConstraints += nameLabelVerticalConstraints



    let skipButtonVerticalConstraints = NSLayoutConstraint.constraints(
        withVisualFormat: "V:|-20-[order]",
        options: [],
        metrics: nil,
        views: views)
    allConstraints += skipButtonVerticalConstraints



    let welcomeHorizontalConstraints = NSLayoutConstraint.constraints(
        withVisualFormat: "H:|[backBtn]-5-[naviTitle]-5-[order]|",
        options: [],
        metrics: nil,
        views: views)
    allConstraints += welcomeHorizontalConstraints


    let topRowHorizontalConstraints = NSLayoutConstraint.constraints(
        withVisualFormat: "H:|-15-[backBtn(60)]-[naviTitle]-[order]-15-|",
       options: [.alignAllCenterY],
        metrics: nil,
        views: views)
    allConstraints += topRowHorizontalConstraints


   NSLayoutConstraint.activate(allConstraints)

但是不行

最佳答案

起初我猜你必须禁用自动调整掩码

backBtn.translatesAutoresizingMaskIntoConstraints = false
naviTitle.translatesAutoresizingMaskIntoConstraints = false 
bell.translatesAutoresizingMaskIntoConstraints = false
order.translatesAutoresizingMaskIntoConstraints = false

然后修复你的约束,因为这些约束不能同时满足

"H:|[backBtn]-5-[naviTitle]-5-[order]|"
"H:|-15-[backBtn(60)]-[naviTitle]-[order]-15-|"

您与 superview 的 backBtn 距离不能同时为 0 和 15,对于其余的约束也是如此。

关于ios - 如何使用 Visual Formate Language 为 xib 文件设置约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41043498/

相关文章:

ios - 第二个标签栏项中的搜索 Controller 不显示键盘

ios - 为什么我的 NSURLConnection 返回 null?

ios - 有没有办法从 Google 登录页面中删除用户?

Swift - 添加 UITableView 协议(protocol)

ios - 通过 CocoaPods 添加了适用于 iOS 的 Google map 的 Swift 项目中的链接器错误

ios - 为什么图像过渡会影响我的动画?

ios - Swift:使用约束平移 UIImage

java - 通过constraintSet以编程方式设置约束会导致 View 消失

ios - 谷歌通讯录 OAUTH2

sql - Oracle:什么时候检查约束?