Autolayout not working and warnings

和自甴很熟 提交于 2019-12-11 20:43:57

问题


I am trying to add a button just above the bottom of my view. I am adding the autolayout constraints programatically, and here is my code.

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"height : %f", self.view.bounds.size.height);
    [self.view addConstraints:
    [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=topSpace)-[button1]"
                                             options:0
                                             metrics:@{@"topSpace":@(self.view.bounds.size.height*0.9f)}
                                               views:@{@"button1" : self.button1}]];

    // Do any additional setup after loading the view, typically from a nib.
}

The result of this code is shown in the image

the button is certainly not in the bottom of the superview. Also i am getting the following warnings when i run my program.
2014-06-01 22:02:19.144 AutoLayout[2886:60b] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSIBPrototypingLayoutConstraint:0x8d40590 'IB auto generated at build time for view with fixed frame' V:|-(269)-[UIButton:0x8d815c0]   (Names: '|':UIView:0x8d82360 )>",
    "<NSLayoutConstraint:0x8c34f60 V:|-(>=432)-[UIButton:0x8d815c0]   (Names: '|':UIView:0x8d82360 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x8c34f60 V:|-(>=432)-[UIButton:0x8d815c0]   (Names: '|':UIView:0x8d82360 )>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Any help on these two issues.


回答1:


A ">=" constraint by itself is not enough to position a view (how does the system know how much greater?). Use an "=" constraint instead. The NSIBPrototypingLayoutConstraint are constraints added by the system in IB if you don't add any yourself. If you're going to add the button in IB, then it would be easier to add the constraints there as well. If you want to add constraints in code, then create and add your button in code as well (the alternative, using an IB added button, is to remove any constraints made there, before adding your own).



来源:https://stackoverflow.com/questions/23983427/autolayout-not-working-and-warnings

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!