0

プログラムで制約を使用していくつかのコンポーネントを移動する簡単なプロジェクトを作成しました。この場合は単なる UIPickerView ですが、残念ながら、その意味が本当に理解できないエラーコードが常に表示されます。

ここに私のインターフェースがあります:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIPickerView *pickerView;

@end

ここに私の実装があります:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSLayoutConstraint *constraint = [NSLayoutConstraint
                                      constraintWithItem:_pickerView
                                      attribute:NSLayoutAttributeTop
                                      relatedBy:NSLayoutRelationEqual
                                      toItem:self.view
                                      attribute:NSLayoutAttributeTop
                                      multiplier:1.0f
                                      constant:216.f];    
    [self.view addConstraint:constraint];    
}

そして、これが私のデバッガコンソールに表示されるものです:

2013-09-19 10:44:19.582 Constrain2[3092:c07] 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) 
(
    "<NSLayoutConstraint:0x71808f0 V:[UIPickerView:0x7180fd0(216)]>",
    "<NSLayoutConstraint:0x71805d0 V:|-(216)-[UIPickerView:0x7180fd0]   (Names: '|':UIView:0x7181290 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x7184d50 h=--& v=--& V:[UIView:0x7181290(416)]>",
    "<NSLayoutConstraint:0x7181740 UIPickerView:0x7180fd0.bottom == UIView:0x7181290.bottom>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x71808f0 V:[UIPickerView:0x7180fd0(216)]>

なぜこのようなエラーメッセージが表示されるのですか? このチュートリアルhttp://ioscreator.com/auto-layout-in-ios-6-adding-constraints-through-code/も試しましたが、UIButton に問題はありませんでした。ただし、ストーリーボードを使用してボタンを作成していません。私の場合は、ストーリーボード経由で UIPickerView を配置しています。それが問題の原因ですか?

ありがとうございました。

4

1 に答える 1

1

制約 0x71808f0 は、ピッカーの高さを 216 ポイントに設定する必要があります。

制約 0x71805d0 は、ピッカーの上端を の上端から 216 ポイント下に設定しようとしていますself.view。(これは、 で追加した制約ですviewDidLoad)。

Constraint 0x7181740 は、ピッカー ビューの下端が正確に の下端になるように設定しますself.view

self.view自動レイアウトは高さを 216 + 216 = 432 ポイントに設定することで、これら 3 つの制約のみを満たすことができます。

残念ながら、制約 0x7184d50 は の高さself.viewを 416 ポイントに設定しようとしています。したがって、自動レイアウトはすべての制約を同時に満たすことはできません。

高さself.view480 ポイントの 3.5 インチ画面 (iPhone 4S 以前) を使用していて、ステータス バーがオン (20 ポイント) で、ナビゲーションバーまたはツールバー (44 ポイント)、ビューに 480 - 20 - 44 = 416 ポイントを残します。

に制約を追加するのはなぜviewDidLoadですか?

于 2013-09-19T04:16:15.030 に答える