Swift StoryBoard Auto Layout求助:按钮定位与尺寸适配问题
Swift Auto Layout 布局问题解决方法
一、在屏幕底部3/4区域放置带间距的三个按钮
Storyboard 操作步骤
- 将三个按钮拖入视图,选中三个按钮,在Align菜单中选择「Horizontal Center in Container」实现垂直居中对齐;在Pin菜单中设置按钮之间的固定间距(比如20pt),同时给最左侧按钮添加「Leading to Safe Area」约束、最右侧按钮添加「Trailing to Safe Area」约束,确保左右留有合适边距。
- 给任意一个按钮设置顶部约束:选中按钮顶部与视图顶部的约束,在属性检查器中将Multiplier改为
0.25(按钮顶部到视图顶部的距离为视图高度的1/4,剩余3/4区域即为按钮所在范围)。 - 给最底部的按钮设置底部约束:添加按钮底部与Safe Area底部的约束,设置固定间距(比如20pt),避免按钮贴死底部。
代码实现方式
先将三个按钮添加到视图并关闭自动转译:
let button1 = UIButton(type: .custom) let button2 = UIButton(type: .custom) let button3 = UIButton(type: .custom) // 设置按钮图片等属性... [button1, button2, button3].forEach { $0.translatesAutoresizingMaskIntoConstraints = false view.addSubview($0) } // 水平约束:按钮间固定间距,左右贴SafeArea边距 let horizontalPadding: CGFloat = 20 let buttonSpacing: CGFloat = 20 NSLayoutConstraint.activate([ button1.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: horizontalPadding), button2.leadingAnchor.constraint(equalTo: button1.trailingAnchor, constant: buttonSpacing), button3.leadingAnchor.constraint(equalTo: button2.trailingAnchor, constant: buttonSpacing), button3.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -horizontalPadding), // 三个按钮垂直居中对齐 button2.centerYAnchor.constraint(equalTo: button1.centerYAnchor), button3.centerYAnchor.constraint(equalTo: button1.centerYAnchor) ]) // 垂直约束:占据底部3/4区域 NSLayoutConstraint.activate([ button1.topAnchor.constraint(equalTo: view.topAnchor, multiplier: 0.25), button1.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20) ])
二、让按钮宽高等于对应图片尺寸
代码实现
直接获取按钮图片的尺寸,给按钮添加宽高约束:
// 给button1设置宽高等于图片尺寸 if let image = button1.imageView?.image { button1.widthAnchor.constraint(equalToConstant: image.size.width).isActive = true button1.heightAnchor.constraint(equalToConstant: image.size.height).isActive = true } // 同理处理button2和button3
注:如果图片是@2x或@3x格式,UIImage.size会自动返回逻辑分辨率(实际像素除以缩放因子),无需额外转换。
Storyboard 操作
给按钮设置好图片后,选中按钮,在Size Inspector中添加宽高约束,手动输入图片的逻辑尺寸(比如100x100@2x的图片,输入50x50);或者去掉按钮的宽高约束,将按钮的Content Mode设为Center,按钮会自动根据图片大小调整自身尺寸。
内容的提问来源于stack exchange,提问作者선준우
相关产品推荐
相关产品推荐

