iOS开发:如何将dateInfoStackView垂直置于userInfoStackView下方
问题:将dateInfoStackView放置在userInfoStackView下方的布局调整
我希望将dateInfoStackView放置在userInfoStackView的下方,当前布局未达到预期效果。尝试调整distribution属性后仍无法解决问题,我正试图创建一个可复用的UI横幅,相关代码如下:
class UserCell: UIView { var rootStack = UIStackView() var userInfoStackView = UIStackView() var dateInfoStackView = UIStackView() override init(frame: CGRect) { super.init(frame: frame) setUPViews() addComponents() layoutComponents() } private func setUPViews(){ rootStack = UIStackView() rootStack.translatesAutoresizingMaskIntoConstraints = false rootStack.alignment = .center rootStack.distribution = .fillEqually rootStack.spacing = 5 userInfoStackView = UIStackView() userInfoStackView.axis = .horizontal userInfoStackView.spacing = 10 dateInfoStackView = UIStackView() dateInfoStackView.axis = .vertical dateInfoStackView.spacing = 2 } private func addComponents() { userInfoStackView.addArrangedSubview(nameLabel) userInfoStackView.addArrangedSubview(compCode) dateInfoStackView.addArrangedSubview(captionLabel) dateInfoStackView.addArrangedSubview(dateLabel2) } private func layoutComponents() { addSubview(rootStack) rootStack.addArrangedSubview(userInfoStackView) rootStack.addArrangedSubview(dateInfoStackView) rootStack.snp.makeConstraints { (make) in make.edges.equalToSuperview() } } }
解决方案
问题核心是根栈视图rootStack默认采用水平轴(.horizontal),导致两个子栈视图并排显示。只需调整根栈的轴方向为垂直,再优化相关属性即可实现上下排列:
- 修改
rootStack的axis为.vertical,让子视图垂直堆叠 - 移除冗余的栈视图重复初始化代码(类属性已声明,无需在
setUPViews里重新创建) - 根据需求调整
alignment和distribution属性,避免强制均分高度导致布局变形
修改后的setUPViews方法代码:
private func setUPViews(){ rootStack.translatesAutoresizingMaskIntoConstraints = false rootStack.axis = .vertical // 改为垂直排列 rootStack.alignment = .leading // 可根据需求改为.center或.trailing rootStack.distribution = .fill // 适配内容高度,替换原.fillEqually rootStack.spacing = 5 userInfoStackView.axis = .horizontal userInfoStackView.spacing = 10 dateInfoStackView.axis = .vertical dateInfoStackView.spacing = 2 }
调整后,userInfoStackView会显示在上方,dateInfoStackView自动排列在其下方。若需要控制整体横幅的对齐方式,修改rootStack的alignment属性即可。
内容的提问来源于stack exchange,提问作者Mayowa Paul
相关产品推荐
相关产品推荐

