【问题标题】:UIStackview align leftUIStackview 左对齐
【发布时间】:2017-05-13 02:47:10
【问题描述】:

我正在尝试将 UIStackview 中的项目水平对齐到左侧。

有没有办法以编程方式做到这一点?我试图通过情节提要做到这一点,但没有成功。出于某种原因,UIStackView 中的项目本身居中。

【问题讨论】:

  • 希望this answer对你有用。您需要应用相同的方法,但水平而不是垂直。

标签: ios swift uistackview


【解决方案1】:

使用UIStackView.alignment 属性。

参考:https://developer.apple.com/reference/uikit/uistackview/1616243-alignment

【讨论】:

    【解决方案2】:

    故事板

    1. 点击Attributes Inspector
    2. 从下拉菜单中选择Trailing 987654323 @ @ @ / li>

    以编程方式

    1. 初始化时更改UIStackView.alignment属性。

    【讨论】:

      【解决方案3】:

      感谢各位的建议。我尝试使用 UIStackView.alignment 上的选项,但它从未真正按预期工作。最后我弄乱了 UIStackView 的宽度来达到预期的效果。

      if(prdDTO.getShellIcn() == "Y")
          {
              let icon = UIImageView()
              icon.contentMode = UIViewContentMode.scaleAspectFit
              icon.image = #imageLiteral(resourceName: "Shellfish")
              prdIngredients.addArrangedSubview(icon)
              stackviewWidth += 25
          }
      
          if(prdDTO.getVegeIcn() == "Y")
          {
              let icon = UIImageView()
              icon.contentMode = UIViewContentMode.scaleAspectFit
              icon.image = #imageLiteral(resourceName: "Vege")
              prdIngredients.addArrangedSubview(icon)
              stackviewWidth += 25
          }
      
          if(prdDTO.getSpicyIcn() == "Y")
          {
              let icon = UIImageView()
              icon.contentMode = UIViewContentMode.scaleAspectFit
              icon.image = #imageLiteral(resourceName: "Spicy")
              prdIngredients.addArrangedSubview(icon)
              stackviewWidth += 25
          }
      
          prdIngredients.widthAnchor.constraint(equalToConstant: CGFloat(stackviewWidth))
      

      【讨论】:

        【解决方案4】:

        如果您使用 StackView 将轴属性设置为“水平”, 我认为您不能将其与左侧对齐。

        但是有一种方法可以让它在视觉上离开。

        1. 使用“相等”关系设置 StackView 前导约束
        2. 将 StackView 尾随约束设置为“大于或等于”

        喜欢这个

        stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        stackView.trailingAnchor.constraint(greaterThanOrEqualTo: view.trailingAnchor).isActive = true
        

        【讨论】:

        • 这对我有用,可以让项目与项目之间的所需间距左对齐。
        • 很好的解决方案!如果您使用情节提要和约束,您将遇到一些问题。只需放置一个在运行时删除的占位符即可隐藏此问题。
        • 也许我遗漏了一些东西,但如果我们想将元素向左对齐,它应该是 lessThanOrEqual
        【解决方案5】:

        尝试在您的堆栈视图中添加一个空间视图,就像这样

         // To Make Our Buttons aligned to left We have added one spacer view
            UIButton *spacerButton = [[UIButton alloc] init];
            [spacerButton setContentHuggingPriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];
            [spacerButton setContentCompressionResistancePriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];
            [self.buttonsStackView addArrangedSubview:spacerButton];
        

        然后制作

        self.buttonsStackView.distribution = UIStackViewDistributionFill;
        

        【讨论】:

        • 我发现只添加一个空的 UIView 工作正常
        【解决方案6】:

        Swift 4.2 + iOS 12.1 测试:

            let stackView: UIStackView = UIStackView(frame: .zero)
            stackView.translatesAutoresizingMaskIntoConstraints = false
            stackView.axis = .vertical
            stackView.alignment = .leading // <- aligns each of your items to the left. 
        
            // further setup + setup constraints
            // ...
        

        【讨论】:

        • stackView.translatesAutoresizingMaskIntoConstraints = false 这有助于获得干净的日志,而没有关于破坏约束的 uisv-spacing 警告
        • 在storyboard中设置时leading对齐不可用吗?
        • @Hemang 我可以回答你的问题。我只是在代码中建立我的观点。但是您可以执行以下操作。通过故事板创建您的堆栈视图并将其链接到您的代码并在代码中而不是在故事板中配置堆栈视图。
        • 感谢@BaranEmre 的提示。
        • .leading 仅适用于 .vertical,但问题是关于水平的
        【解决方案7】:

        感谢@Ankit Maurya,提供快速示例的解决方案

         let stackView = UIStackView()
         stackView.axis = .horizontal
         stackView.distribution = .fill
         
         let spacer = UIView()
         spacer.isUserInteractionEnabled = false
         spacer.setContentHuggingPriority(.fittingSizeLevel, for: .horizontal)
         spacer.setContentCompressionResistancePriority(.fittingSizeLevel, for: .horizontal)
        
         // stackView.addArrangedSubview.... any u need
         stackView.addArrangedSubview(spacer)
        

        例子:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-12
          • 2020-11-07
          • 2014-06-04
          • 2013-09-07
          • 2018-08-31
          • 2017-03-07
          • 1970-01-01
          相关资源
          最近更新 更多