0

have a problem with NSLayoutConstraint and .scaleAspectFill after applying logoView (positioning and scaling) and titleLabel constraints, titleLabel's Y position not sets correctly

titleLabel.topAnchor.constraint(equalTo: logoView.bottomAnchor, constant: 20])

here my sample:

let logoView:UIImageView = {
        let img = UIImage(named: "big_logo")
        let im = UIImageView(image: img)
        im.translatesAutoresizingMaskIntoConstraints = false
        im.contentMode = .scaleAspectFill
        return im
}()

    lazy var titleLabel:UILabel = {
        let title:UILabel = UILabel()
        title.translatesAutoresizingMaskIntoConstraints = false
        title.text = MuiPack.getMuiString(key: "splash_greeting")
        title.font = UIFont.boldSystemFont(ofSize: 18)
        title.textColor = .black
        return title
    }()

 NSLayoutConstraint.activate([logoView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.6),
                                     logoView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
                                     logoView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: -20)])

NSLayoutConstraint.activate([titleLabel.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
                                     titleLabel.topAnchor.constraint(equalTo: logoView.bottomAnchor, constant: 20])

1 Answer 1

1

Your logoView does not have an intrinsicSize, so it has no height.

If you change your initialization as follows, you'll see what's happening:

let logoView:UIImageView = {
    let img = UIImage(named: "cross")
    let im = UIImageView(image: img)
    im.translatesAutoresizingMaskIntoConstraints = false
    im.contentMode = .scaleAspectFill
    // set a background color so you can see the image view's frame
    im.backgroundColor = .blue
    // clip the image to the bounds of the view's frame
    im.clipsToBounds = true
    return im
}()

You can either set an explicit height constraint, or set it proportional to its width.

This will make it "square":

    NSLayoutConstraint.activate([
        logoView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.6),
        logoView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),            
        logoView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: -20),
        // add proportional height anchor
        logoView.heightAnchor.constraint(equalTo: logoView.widthAnchor, multiplier: 1.0)
        ])
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.