0

ビューの一番下のすぐ上にボタンを追加しようとしています。自動レイアウトの制約をプログラムで追加しています。これが私のコードです。

- (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.
}

このコードの結果は画像に表示されておりここに画像の説明を入力、ボタンは確かにスーパービューの下部にはありません。また、プログラムを実行すると、次の警告が表示されます。

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.

これら2つの問題に関するヘルプ。

4

1 に答える 1

0

">=" 制約だけでは、ビューを配置するのに十分ではありません (システムはどのくらい大きいかをどのように知るのでしょうか?)。代わりに「=」制約を使用してください。NSIBPrototypingLayoutConstraint は、自分で追加しない場合にシステムによって IB に追加される制約です。ボタンを IB に追加する場合は、そこに制約を追加する方が簡単です。コードに制約を追加したい場合は、コードにもボタンを作成して追加します (代わりに、IB が追加したボタンを使用して、独自のボタンを追加する前に、そこに作成された制約をすべて削除します)。

于 2014-06-01T19:34:15.373 に答える