美文网首页
VFL布局问题的解决方法(包括垂直居中和水平居中)

VFL布局问题的解决方法(包括垂直居中和水平居中)

作者: 是花落呀 | 来源:发表于2016-12-09 17:44 被阅读459次

VFL是什么就不多说,在这里主要记录下在项目使用VFL时遇到的一些问题!

1、多控件的水平布局问题

这里设置了水平约束,以及控件的宽高约束,且三个控件的centerY是相等的

// 这里有三个控件,需要让它们处于水平布局状态
addSubview(previousBtn)
addSubview(textLabel)
addSubview(nextBtn)

var cons = NSLayoutConstraint
      .constraints(withVisualFormat: "H:|-[previousBtn(30)]-20-[textLabel]-20-[nextBtn(30)]-|",
                   options: .alignAllCenterY,
                   metrics: nil,
                   views: views)
        
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "V:[previousBtn(30)]",
                   options: [],
                   metrics: nil,
                   views: views)
   
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "V:[nextBtn(30)]",
                   options: [],
                   metrics: nil,
                   views: views)

2、控件居中问题

上面的三个控件需要设置垂直居中,(由于水平方向上已经有相关的约束,所以可以不设置),我这里只设置textLabel的垂直约束(那个都可以,因为他们的centerY已经有相等约束)
这里的实现有两套方案

A、VFL约束与Apple封装的约束混合使用
let views: [String: Any] = ["previousBtn": previousBtn,
                          "textLabel": textLabel,
                          "nextBtn": nextBtn]

添加垂直居中约束

var cons = NSLayoutConstraint
      .constraints(withVisualFormat: "H:|-[previousBtn(30)]-20-[textLabel]-20-[nextBtn(30)]-|",
                   options: .alignAllCenterY,
                   metrics: nil,
                   views: views)
        
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "V:[previousBtn(30)]",
                   options: [],
                   metrics: nil,
                   views: views)
   
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "V:[nextBtn(30)]",
                   options: [],
                   metrics: nil,
                   views: views)

// 混合约束                   
cons += [NSLayoutConstraint.init(item: textLabel,
                                  attribute: .centerY,
                                  relatedBy: .equal,
                                  toItem: self,
                                  attribute: .centerY,
                                  multiplier: 1,
                                  constant: 0)]
addConstraints(cons)
B、纯VFL约束。

最后必须同时添加水平居中约束和垂直居中约束,否则会报错

let views: [String: Any] = ["previousBtn": previousBtn,
                          "textLabel": textLabel,
                          "nextBtn": nextBtn,
                          "superview": self]
var cons = NSLayoutConstraint
      .constraints(withVisualFormat: "H:|-[previousBtn(30)]-20-[textLabel]-20-[nextBtn(30)]-|",
                   options: .alignAllCenterY,
                   metrics: nil,
                   views: views)
   
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "V:[previousBtn(30)]",
                   options: [],
                   metrics: nil,
                   views: views)
   
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "V:[nextBtn(30)]",
                   options: [],
                   metrics: nil,
                   views: views)
   
// VFL设置居中 必须设置水平居中和垂直居中
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "H:[textLabel]-(<=0)-[superview]",
                   options: .alignAllCenterY,
                   metrics: nil,
                   views: views)
   
cons += NSLayoutConstraint
      .constraints(withVisualFormat: "V:[textLabel]-(<=0)-[superview]",
                   options: .alignAllCenterX,
                   metrics: nil,
                   views: views)
addConstraints(cons)

Enjoy :)

相关文章

  • VFL布局问题的解决方法(包括垂直居中和水平居中)

    VFL是什么就不多说,在这里主要记录下在项目使用VFL时遇到的一些问题! 1、多控件的水平布局问题 这里设置了水平...

  • css布局博客

    1.左右布局和左中右布局2.垂直居中和水平居中

  • 页面布局居中问题

    css页面布局水平垂直居中问题 居中问题

  • 居中布局

    水平居中 垂直居中 垂直水平居中 已知元素的宽高的居中布局 定位居中布局 盒模型居中布局 图片的垂直水平居中(利用...

  • 布局

    布局主要分为布局和居中,布局一般指的是多个div的左右布局或者左中右布局。居中就是水平居中和垂直居中 布局 只要记...

  • css水平居中和水平垂直居中

    水平居中和水平垂直居中demo

  • 常用的居中方法

    本文将介绍的居中方法有 ,水平居中,垂直居中和水平垂直居中。 一水平居中 二水平垂直居中

  • flexbox

    1.水平垂直居中。在html的布局中,水平垂直居中是一个经常能遇到的布局方式。 (三行代码实现下面图片的水平垂直居...

  • 水平居中与垂直居中

    水平居中和垂直居中可以说是在开发中经常遇到的问题,网上搜索水平居中和垂直居中的方法有很多,有的方法并不是很好,所以...

  • CSS 居中的常见实现方式

    居中是很常见的网页布局,包括水平居中和垂直居中,看起来似乎很简单,但每次到实际用的时候总会发现“咦,怎么不 wor...

网友评论

      本文标题:VFL布局问题的解决方法(包括垂直居中和水平居中)

      本文链接:https://www.haomeiwen.com/subject/hhfymttx.html