UIKit中如何让UIView尺寸随子视图自适应并实现内边距效果
实现方案
你需要修改两处约束逻辑即可实现需求:
1. 替换StackView与容器UIView的约束
删掉你当前configureUIView方法中给topStackView设置的居中约束,改为四边贴合父容器并预留对应内边距的约束:
// 原topStackView的3个约束全部删除,替换为以下约束 NSLayoutConstraint.activate([ topStackView.heightAnchor.constraint(equalToConstant: 150), // 水平方向左右各预留10内边距 topStackView.leadingAnchor.constraint(equalTo: uiView.leadingAnchor, constant: 10), topStackView.trailingAnchor.constraint(equalTo: uiView.trailingAnchor, constant: -10), // 垂直方向上下各预留5内边距 topStackView.topAnchor.constraint(equalTo: uiView.topAnchor, constant: 5), topStackView.bottomAnchor.constraint(equalTo: uiView.bottomAnchor, constant: -5) ])
2. 删除容器UIView的固定宽高约束
你当前在viewDidLoad中给uiView写死了宽高为500、400,这是导致容器无法自适应的核心原因,删除这两个约束,仅保留居中约束即可:
NSLayoutConstraint.activate([ // 删除这两行固定宽高的约束 // uiView.widthAnchor.constraint(equalToConstant: 500), // uiView.heightAnchor.constraint(equalToConstant: 400), uiView.centerXAnchor.constraint(equalTo: view.centerXAnchor), uiView.centerYAnchor.constraint(equalTo: view.centerYAnchor) ])
修改完成后,容器UIView的尺寸会根据内部StackView的尺寸自动计算,自动叠加你设置的水平10、垂直5的内边距。
拓展简便方案(最低支持iOS14+)
如果你的项目最低适配iOS14及以上版本,可以不用额外套一层UIView,直接给UIStackView设置内边距和背景色即可:
// 开启StackView的内边距适配 topStackView.isLayoutMarginsRelativeArrangement = true // 设置对应内边距 topStackView.directionalLayoutMargins = NSDirectionalEdgeInsets(top: 5, leading: 10, bottom: 5, trailing: 10) // 直接设置背景色 topStackView.backgroundColor = .purple
内容的提问来源于stack exchange,提问作者Farhandika
相关产品推荐
相关产品推荐

