【问题标题】:Why the view does not fit on the parent view?为什么视图不适合父视图?
【发布时间】:2021-09-26 04:58:31
【问题描述】:

我无法理解视图不适合父视图?此屏幕截图显示绿色按钮的问题,该按钮不适合父视图。红色背景颜色是containerView。 我正在使用 SnapKit 进行约束。请帮我。谢谢!

Screenshot of the result

 private lazy var scrollView = UIScrollView()
 private lazy var containerView = UIView()
 // etc
 
 // viewDidLoad
 scrollView.addSubview(containerView)
 containerView.addSubviews([boxView, addButton])
 boxView.addSubviews([titleLabelView, vStackView])
 view.addSubview(scrollView)

 // viewWillLayoutSubviews
 scrollView.snp.makeConstraints {
     $0.edges.equalToSuperview()
 }
 containerView.snp.makeConstraints {
     $0.edges.equalToSuperview()
     $0.width.equalToSuperview()
 }
 addButton.snp.makeConstraints {
     $0.height.equalTo(65)
     $0.top.equalTo(boxView.snp.bottom).offset(24)
     $0.leading.trailing.equalToSuperview().inset(40)
 }

【问题讨论】:

  • 我建议不要立即在你的声明中加入约束。相反,将其分解为视图/子视图。添加约束。 only 然后尝试编写你的代码。除了lazy、$0. 和其他所有内容之外,还有更多内容。这是没有冒犯的意思!不使用Superview,约束就够难了!一步一步来!

标签: swift autolayout snapkit


【解决方案1】:

如果没有makeConstraints() 方法无法确定,但如果它只是应用正常的自动布局约束,则需要为底部常量使用负值。

在 AL 中,正值表示从锚点向下移动,而您需要将按钮的边缘从锚点(框的底部锚点)向上移动。

如果您来自 Interface BUilder,这并不明显,因为在 IB 中,负值是由工具应用的。

$0.top.equalTo(boxView.snp.bottom).offset(-24)

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2015-08-12
    相关资源
    最近更新 更多