从下面的集合视图中对标签进行程序化设置约束。

问题描述 投票:0回答:1

设置约束条件 lbl_Title 从下到上 collectionView.

在设置底部约束条件60时,标签会在收藏视图下方,设置为-60后,则调整为位置。

如何根据收藏设置约束条件?

func setCollectionViewConstraints() -> Void {

    collectionView.translatesAutoresizingMaskIntoConstraints = false
    collectionView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 10).isActive = true
    collectionView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 0).isActive = true
    collectionView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 0).isActive = true
    collectionView.heightAnchor.constraint(greaterThanOrEqualToConstant: 60).isActive = true
}

func setRecentJobLabelConstraints() -> Void {

    lbl_Title.translatesAutoresizingMaskIntoConstraints = false
    lbl_Title.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -60).isActive = true
    lbl_Title.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true
    lbl_Title.heightAnchor.constraint(greaterThanOrEqualToConstant: 20).isActive = true
}

在这里,如果将约束条件设置为 -60,我认为是错误的方法。

ios swift uilabel ios-autolayout collectionview
1个回答
1
投票

设置 -60 是正确的方式。的坐标系。CocoaTouch 有点奇怪,因为它是 (0,0) 是在 top-left 器件的角,相比于协调性的在。Cocoa 其起于 bottom-left. 当你在程序上做更多的自动布局后,你就会习惯这样做。

注意:另外,当你试图将子视图限制在超级视图上时,你需要给负值。right.

不同的方法。另一种方法是将超视图限制在子视图中,这样更容易读懂,更容易解释。约束 bottomAnchorsuper-viewsub-view's bottomAnchor 与一个60点的padding.它不是一个错误的方法,调用常量,同时使用底部& 尾部约束应该用一个负值,你可以使用下面的扩展我创建的,而不是重复相同的自动布局行& 。

bottomAnchor.constraint(equalTo: lbl_Title.bottomAnchor, constant: 60).isActive = true

0
投票

这不是一个错误的方法,调用常量,同时使用底部&尾部约束应该用一个负值,你可以使用下面的扩展,我创建,而不是重复相同的自动布局行&超过了

// MARK: - Anchors Method
extension UIView {
  func anchors (top:NSLayoutYAxisAnchor? , leading:NSLayoutXAxisAnchor? , bottom : NSLayoutYAxisAnchor? , trailing: NSLayoutXAxisAnchor? , padding : UIEdgeInsets = .zero){

    translatesAutoresizingMaskIntoConstraints = false

    if let top = top {
        topAnchor.constraint(equalTo: top , constant: padding.top).isActive = true
    }
    if let leading = leading {
        leadingAnchor.constraint(equalTo: leading , constant: padding.left).isActive = true
    }
    if let bottom = bottom {
        bottomAnchor.constraint(equalTo: bottom , constant: -padding.bottom).isActive = true
    }
    if let trailing = trailing {
        trailingAnchor.constraint(equalTo: trailing , constant: -padding.right).isActive = true
    }
  }
}

并像下面这样调用它。

YourUIView.anchors(top: View.topAnchor , leading: View.leadingAnchor , bottom: View.bottomAnchor , trailing: View.trailingAnchor , padding: .init(top: 10, left: 10, bottom: 10, right: 10))

给你一个小建议,没有必要将void赋值为返回,因为函数并没有返回什么东西。

© www.soinside.com 2019 - 2024. All rights reserved.