如何在UIStackView中将第二个UIImageView对齐到底部?
嗨,这个布局需求用Auto Layout就能完美实现,我给你讲两种最常用的实现方式,不管是可视化布局还是代码写约束都能搞定:
方法一:Storyboard可视化布局
这种方式不用写代码,拖拖拽拽就能搞定:
- 先把两个
UIImageView和一个UITextView拖到ViewController的根视图上,摆好大致的位置 - 给顶部的
UIImageView设置约束:- 顶部和父视图的安全区顶部对齐(可以留16pt的间距)
- 左右两侧和父视图边缘留固定间距(比如16pt)
- 给它设置固定的高度(或者宽度和父视图匹配,高度固定)
- 给底部的
UIImageView设置约束(这是关键):- 底部和父视图的安全区底部对齐(同样留16pt间距)
- 左右两侧和父视图边缘留固定间距
- 设置固定的宽高(或者宽度匹配父视图,高度固定)
- 最后给
UITextView设置约束:- 顶部和顶部
UIImageView的底部对齐,留固定间距 - 左右两侧和父视图边缘留固定间距
- 底部和底部
UIImageView的顶部对齐,留固定间距
- 顶部和顶部
- 别忘了给
UITextView开启滚动功能(在属性面板里勾选Scrolling Enabled),这样当文本内容过多时,它会自动滚动,不会把底部的UIImageView顶跑
方法二:代码实现Auto Layout
如果习惯用代码来控制布局,可以参考下面的Swift示例:
// 初始化三个控件 let topImageView = UIImageView() topImageView.image = UIImage(named: "your_top_image") topImageView.contentMode = .scaleAspectFit topImageView.translatesAutoresizingMaskIntoConstraints = false let textView = UITextView() textView.text = "这里是你的文本内容,可以很长很长..." textView.isScrollEnabled = true textView.translatesAutoresizingMaskIntoConstraints = false let bottomImageView = UIImageView() bottomImageView.image = UIImage(named: "your_bottom_image") bottomImageView.contentMode = .scaleAspectFit bottomImageView.translatesAutoresizingMaskIntoConstraints = false // 将控件添加到父视图 view.addSubview(topImageView) view.addSubview(textView) view.addSubview(bottomImageView) // 激活约束 NSLayoutConstraint.activate([ // 顶部ImageView约束 topImageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 16), topImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), topImageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), topImageView.heightAnchor.constraint(equalToConstant: 100), // 自定义高度 // 底部ImageView约束(核心:固定在底部) bottomImageView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16), bottomImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), bottomImageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), bottomImageView.heightAnchor.constraint(equalToConstant: 80), // 自定义高度 // UITextView填充中间空间 textView.topAnchor.constraint(equalTo: topImageView.bottomAnchor, constant: 16), textView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), textView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), textView.bottomAnchor.constraint(equalTo: bottomImageView.topAnchor, constant: -16) ])
这段代码里,底部的UIImageView通过bottomAnchor绑定到了安全区底部,不管UITextView的内容多少,它都会牢牢固定在底部,中间的空间由UITextView自动填充,内容过多时就会滚动。
内容的提问来源于stack exchange,提问作者dobiho
相关产品推荐
相关产品推荐

