Zigii Wong
Zigii Wong

Reputation: 7816

How to set constraint with a specific width and height view

I had set some constraints with visual format language to my UIImageView( a little star).

Here is my code:

        //Bottom
    format = @"V:|-[_title]-|";
    constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
    [_bottom addConstraints:constraintsArray];

    format = @"V:|-[_stars(==17)]-|";
    constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
    [_bottom addConstraints:constraintsArray];

    format = @"V:|-15-[_number]-15-|";
    constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
    [_bottom addConstraints:constraintsArray];

    format = @"H:|-[_title(240)]-[_stars(17)]-[_number]-|";
    constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
    [_bottom addConstraints:constraintsArray];

Note that the _bottom is the super view where I added constraints and I had set the _stars's frame to 17 * 17. But the position of the _stars is not at the vertical center.

enter image description here

How can I fix this? This is what i want. Is there a way to set the view to vertival center?

enter image description here

Thanks a lot for advice.

Edit: _bottom 's code.

    format = @"V:|[_top(100)][_bottom]|";
    constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
    [_background addConstraints:constraintsArray];

    format = @"H:|[_bottom]|";
    constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
    [_background addConstraints:constraintsArray];

Upvotes: 0

Views: 129

Answers (1)

wcd
wcd

Reputation: 1154

try this:

[_bottom addConstraint:[NSLayoutConstraint 
                            constraintWithItem:_stars
                                     attribute:NSLayoutAttributeCenterY 
                                     relatedBy:NSLayoutRelationEqual 
                                        toItem:_bottom
                                     attribute:NSLayoutAttributeCenterY 
                                    multiplier:1.0f 
                                      constant:0.0f]];


//Bottom
format = @"V:|-[_title]-|";
constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
[_bottom addConstraints:constraintsArray];

format = @"V:[_stars(17)]"; // @"V:|-[_stars(==17)]-|" -> @"V:[_stars(17)]"
constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
[_bottom addConstraints:constraintsArray];

format = @"V:|-15-[_number]-15-|";
constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
[_bottom addConstraints:constraintsArray];

format = @"H:|-[_title(240)]-[_stars(17)]-[_number]-|";
constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:format options:0 metrics:nil views:viewsDictionary];
[_bottom addConstraints:constraintsArray];

Not all constraints can be created with visual format string.

Upvotes: 1

Related Questions