首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SnapKit的几个视图的等距

使用SnapKit的几个视图的等距
EN

Stack Overflow用户
提问于 2017-11-16 10:44:56
回答 1查看 3K关注 0票数 2

如何使用SnapKit实现视图(以及firstSubview.left和lastSubview.right的超级视图)与下图中的条形图相同的间距(以及使用SnapKit而不是堆栈视图)?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-19 22:07:06

如果您不想或不能使用UIStackView,可以通过将centerX约束设置到superview来实现相同的布局,并为每个子视图添加不同的乘数:

代码语言:javascript
复制
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .gray

        let containerView = UIView()
        containerView.backgroundColor = .lightGray
        view.addSubview(containerView)

        let numberOfLines = 8
        for _ in 0..<numberOfLines {
            let lineView = UIView()
            lineView.backgroundColor = .cyan
            containerView.addSubview(lineView)
        }

        containerView.snp.makeConstraints { (make) in
            make.top.equalTo(60)
            make.left.equalTo(20)
            make.right.equalTo(-20)
            make.height.equalTo(150)
        }

        let centerXFactor: CGFloat = 2 / CGFloat(containerView.subviews.count + 1)
        containerView.subviews.enumerated().forEach { (index, lineView) in
            lineView.snp.makeConstraints({ (make) in
                make.top.bottom.equalTo(0)
                make.width.equalTo(4)
                make.centerX.equalTo(containerView).multipliedBy(CGFloat(index + 1) * centerXFactor)
            })
        }
    }
}

这里唯一的“魔力”是如何计算lineViews centerX乘数:当您有8 lineViews时,它们之间将有9个空格(还包括containerView的左、右边缘和第一个和最后一个lineView之间的空格)。

若要将lineViewcenterX放在containerView的右侧边缘,则必须将其centerX约束设置为containerViewcenterX约束乘以2(您不想这样做,但计算时需要该值)。

现在,要得到每个lineView的乘数,除以lineViews加1的个数(请记住,我们有比lineViews多一个空间)。然后将centerX约束设置在lineViews上如下(对于8 lineViews,乘数为2/9= 0.2222):

(伪码)

lineView 1: centerX = containerView.centerX乘以(1 * 0.2222)

lineView 2: centerX = containerView.centerX乘以(2 * 0.2222)

lineView 3: centerX = containerView.centerX乘以(3 * 0.2222)

等。

这给了你这个:

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47327580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档