删除 UIStackView 中的自定义间距

Posted

技术标签:

【中文标题】删除 UIStackView 中的自定义间距【英文标题】:Remove custom spacing in UIStackView 【发布时间】:2019-10-25 07:51:25 【问题描述】:

我有一个包含三个子视图的堆栈视图:

stackView.spacing = 8.0

stackView.addArrangeSubview(view1)
stackView.addArrangeSubview(view2)
stackView.addArrangeSubview(view3)

有时,我会在 view2 之后添加自定义间距:

stackView.setCustomSpacing(24.0, after: view2)

现在,我想删除自定义间距。这可以使用 UIStackView 吗?我能想到的唯一方法是

stackView.setCustomSpacing(8.0, after: view2)

但如果我将 stackView 的间距更改为 8.0 以外的值,这将中断,因为在 view2 之后间距将保持 8.0。

【问题讨论】:

【参考方案1】:

您应该重新创建具有特定间距的stackView,并将旧的替换为新的stackView

【讨论】:

【参考方案2】:
let spacingView = UIView()

[View1, View2, spacingView, View3].forEach  view in 
  stackView.addArrangeSubview(view)

当您想删除它时,只需从数组中删除 spacingView,您就可以根据自己的喜好调整 spacingView 的宽度和高度

【讨论】:

【参考方案3】:

试试这个扩展:

extension UIStackView 

    // remove all custom spacing
    func removeCustomSpacing() -> Void 
        let a = arrangedSubviews
        arrangedSubviews.forEach 
            $0.removeFromSuperview()
        
        a.forEach 
            addArrangedSubview($0)
        
    

    // remove custom spacing after only a single view
    func removeCustomSpacing(after arrangedSubview: UIView) -> Void 
        guard let idx = arrangedSubviews.firstIndex(of: arrangedSubview) else  return 
        removeArrangedSubview(arrangedSubview)
        insertArrangedSubview(arrangedSubview, at: idx)
    

简单地用作:

myStackView.removeCustomSpacing()

或者,如果您在多个视图上设置自定义间距,并且只想从一个视图中删除它,请使用:

theStackView.removeCustomSpacing(after: view2)

【讨论】:

以上是关于删除 UIStackView 中的自定义间距的主要内容,如果未能解决你的问题,请参考以下文章

检测 UIStackView 间距中的点击(项目之间)

以编程方式获取嵌入在 UIStackView 中的自定义 UIView

UIStackView背景色和自定义间距

添加 UIStackView 作为 UIBarButtonItem 的自定义视图

如何在 UIStackView 中等间距标签?

具有静态间距的UIStackView子类