嗜鸩 發表於 2023-6-12 11:08:38

Swift自动调整视图布局AutoLayout和AutoresizingMask功能详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>Swift 中 AutoLayout 和 AutoresizingMask</li><ul class="second_class_ul"><li>AutoLayout</li><li>AutoresizingMask</li></ul><li>总结</li><ul class="second_class_ul"></ul></ul></div><p class="maodian"></p><h2>Swift 中 AutoLayout 和 AutoresizingMask</h2>
<p>Swift 中 AutoLayout 和 AutoresizingMask 用于自动调整视图的布局,以适应不同大小的设备和屏幕方向。</p>
<p>两种方法都可以用来处理视图的自动适应问题,但是它们的实现有所不同。</p>
<p class="maodian"></p><h3>AutoLayout</h3>
<p>AutoLayout是一个基于约束的视图布局系统,它可以使视图根据约束条件自动适应不同的设备尺寸和方向。通过添加约束条件,AutoLayout会计算出每个视图的正确位置和大小,以确保它们始终处于正确的位置并且是正确的尺寸。</p>
<p>以下是一些常见的AutoLayout 约束条件:</p>
<ul><li>宽度约束或高度约束:限制视图的宽度或高度;</li><li>水平或垂直间距约束:限制视图之间的间距;</li><li>顶部、底部、左边、右边约束:限制视图在父视图中的位置。</li></ul>
<p>以下是一个简单的示例代码,演示如何使用 <code>AutoLayout</code> 设置一个视图在父视图中水平居中并且垂直居中:</p>
<div class="jb51code"><pre class="brush:java;">import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
      super.viewDidLoad()
      let myView = UIView()
      myView.backgroundColor = .red
      myView.translatesAutoresizingMaskIntoConstraints = false // 关闭 AutoresizingMask,打开 AutoLayout
      view.addSubview(myView) // 将myView添加到父视图上
      NSLayoutConstraint.activate([
            myView.centerXAnchor.constraint(equalTo: view.centerXAnchor), // X轴方向居中
            myView.centerYAnchor.constraint(equalTo: view.centerYAnchor), // Y轴方向居中
            myView.heightAnchor.constraint(equalToConstant: 200), // 设置高度为200
            myView.widthAnchor.constraint(equalTo: myView.heightAnchor, multiplier: 0.8) // 宽度是高度的0.8倍
      ])
    }
}
</pre></div>
<p>以上代码创建了一个红色的 <code>UIView</code> 对象,并将其添加到当前<code>ViewController</code>的主视图上。使用 <code>NSLayoutConstraint.activate()</code> 方法添加了一组约束来确定视图的位置和大小,其中 <code>myView</code> 的中心点与父视图的中心点重合,并且设置了视图的高度和宽度。</p>
<p class="maodian"></p><h3>AutoresizingMask</h3>
<p>AutoresizingMask是一个基于 autoresizingMask 属性 的视图布局系统,它可以使视图根据屏幕方向自动调整大小和位置。当视图调整宽度或高度时,AutoresizingMask 属性可根据视图的布局信息调整子视图的布局。</p>
<p>以下是一些常见的AutoresizingMask 属性:</p>
<ul><li>UIViewAutoresizingFlexibleWidth : 自动调整宽度</li><li>UIViewAutoresizingFlexibleHeight : 自动调整高度</li><li>UIViewAutoresizingFlexibleLeftMargin : 自动调整左边距</li><li>UIViewAutoresizingFlexibleRightMargin : 自动调整右边距</li><li>UIViewAutoresizingFlexibleTopMargin : 自动调整顶部距离</li><li>UIViewAutoresizingFlexibleBottomMargin : 自动调整底部距离</li></ul>
<p>接下来,让我们看一下如何使用 <code>AutoresizingMask</code> 添加布局约束来实现自适应布局。以下是一个示例代码,演示如何使用 <code>autoresizingMask</code> 属性将一个视图居中并根据屏幕方向进行调整大小:</p>
<div class="jb51code"><pre class="brush:java;">import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
      super.viewDidLoad()
      let myView = UIView()
      myView.backgroundColor = .red
      myView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
      myView.center = view.center // 设置视图居中
      myView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleTopMargin, .flexibleBottomMargin] // 自适应宽度、高度和顶部、底部边距
      view.addSubview(myView)
    }
}</pre></div>
<p>以上代码创建了一个红色的 UIView 对象,并将其添加到当前 ViewController 的主视图上。使用 <code>autoresizingMask</code> 属性设置了视图的位置和大小自适应调整,其中宽度和高度都是自适应的,而顶部和底部边距可以随着屏幕方向变化而调整。</p>
<p>值得注意的是,AutoresizingMask 不支持精细的约束设置,只能简单地指定自适应方式,不适用于需要更高级布局的情况。</p>
<p class="maodian"></p><h2>总结</h2>
<p>AutoLayout的实现更加精细、灵活,可以使用约束条件创造出更多不同的布局效果,但AutoresizingMask属性控制简单,适合快速实现简单布局。需要根据具体需求、设计选择使用哪种自适应布局方式。</p>
<p>以上就是Swift自动调整视图布局AutoLayout和AutoresizingMask功能详解的详细内容,更多关于Swift AutoLayout AutoresizingMask的资料请关注琼殿技术社区其它相关文章!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>Swift 并发修改Sendable 闭包实例详解</li><li>Swift之for循环的基础使用学习</li><li>Swift简单快速的动态更换app图标AppIcon方法示例</li><li>Swift 中 Opaque Types学习指南</li><li>Swift 中的 RegexBuilder学习指南</li><li>Swift中的高阶函数功能作用示例详解</li><li>Swift并发系统并行运行多个任务使用详解</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: Swift自动调整视图布局AutoLayout和AutoresizingMask功能详解