簡體   English   中英

ios添加按鈕自動布局

[英]ios add button autolayout

我將一個按鈕插入情節提要中的視圖,如下所示: 在此處輸入圖片說明

我需要使用以下代碼在底部添加自定義約束:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSDictionary *viewsDictionary = [NSDictionary dictionaryWithObject:self.bottomButton forKey:@"bottomButton"];
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[bottomButton]-90-|" options:0 metrics:nil views:viewsDictionary];
    NSArray *v_constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[bottomButton]-20-|" options:0 metrics:nil views:viewsDictionary];
    [self.bottomButton.superview addConstraints:constraints];
    [self.bottomButton.superview addConstraints:v_constraints];
}

但有沖突,錯誤是

 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:0x8c57fb0 'IB auto generated at build time for view with fixed frame' H:|-(254)-[UIButton:0x8c56440](LTR)   (Names: '|':UIView:0x8c56af0 )>",
    "<NSIBPrototypingLayoutConstraint:0x8c58de0 'IB auto generated at build time for view with fixed frame' H:[UIButton:0x8c56440(46)]>",
    "<NSLayoutConstraint:0x8c4fc30 H:[UIButton:0x8c56440]-(90)-|   (Names: '|':UIView:0x8c56af0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x8c62320 h=--& v=--& H:[UIView:0x8c56af0(320)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x8c4fc30 H:[UIButton:0x8c56440]-(90)-|   (Names: '|':UIView:0x8c56af0 )>

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.
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:0x8c58d30 'IB auto generated at build time for view with fixed frame' V:|-(361)-[UIButton:0x8c56440]   (Names: '|':UIView:0x8c56af0 )>",
    "<NSIBPrototypingLayoutConstraint:0x8c58e10 'IB auto generated at build time for view with fixed frame' V:[UIButton:0x8c56440(30)]>",
    "<NSLayoutConstraint:0x8c527c0 V:[UIButton:0x8c56440]-(20)-|   (Names: '|':UIView:0x8c56af0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x8c62380 h=--& v=--& V:[UIView:0x8c56af0(568)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x8c527c0 V:[UIButton:0x8c56440]-(20)-|   (Names: '|':UIView:0x8c56af0 )>

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.

如何解決?

之所以這樣,是因為即使您沒有在IB中明確設置約束,它們也會在運行時自動添加,例如

"<NSIBPrototypingLayoutConstraint:0x8c57fb0 'IB auto generated at build time for view with fixed frame' H:|-(254)-[UIButton:0x8c56440](LTR)   (Names: '|':UIView:0x8c56af0 )>",

請觀看來自WWDC 2013的會話406。當前的最佳實踐是在IB中設置約束,然后僅在無法使用IB設置的代碼中修改/添加約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM