You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),导致两个子栈视图并排显示。只需调整根栈的轴方向为垂直,再优化相关属性即可实现上下排列:

  1. 修改rootStack的axis为.vertical,让子视图垂直堆叠
  2. 移除冗余的栈视图重复初始化代码(类属性已声明,无需在setUPViews里重新创建)
  3. 根据需求调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:50:29