2013-04-15 1 views
2

У меня есть следующий простой тестовый код в мой контроллер:Autolayout ограничение конфликта, когда я указал только одно ограничение

- (void)loadView 
{ 
    UIView *view = [UIView new]; 
    [self setView:view]; 

    UILabel *label = [UILabel new]; 
    [label setText:@"Hello World!"]; 

    [view addSubview:label]; 

    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[label]" 
     options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)]]; 
} 

код выдает следующее исключение, и я не могу понять, почему. Любая помощь будет принята с благодарностью:

2013-04-15 14:15:47.880 libmarkup-test[1072: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:0x753eb60 H:|-(NSSpace(20))-[UILabel:0x7536b60] (Names: '|':UIView:0x75376a0)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x712a2c0 h=--& v=--& UILabel:0x7536b60.midX ==>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x753eb60 H:|-(NSSpace(20))-[UILabel:0x7536b60] (Names: '|':UIView:0x75376a0)> 

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. 

«Не удается одновременно удовлетворяют ограничениям» сообщение особенно сбивает с толку, так как, насколько я могу судить, я только с указанием одно ограничение.

+0

По какой-то причине вопрос был опубликован до того, как я закончил его. –

+0

Грег: где вы устанавливаете рамку для представления? и почему вы используете setView? хотите ли вы добавить этот вид, который вы создаете в качестве подсмотра для какого-либо контроллера? Я не уверен, что у нас достаточно информации, чтобы помочь вам. –

+0

Я не устанавливаю рамку представления - я устанавливаю ее как представление для своего контроллера. Контроллер имеет размеры, чтобы заполнить экран. Этот код выполняется в loadView. Я добавил больше контекста к образцу кода. –

ответ

6

Похоже, вы забыли установить translatesAutoresizingMaskIntoConstraints на UILabel. По умолчанию это будет YES. Таким образом, маска авторазмера на этом ярлыке переводится на дополнительные ограничения, которые затем противоречат тому, который вы указали.

Добавление это должно решить проблему ограничения:

label.translatesAutoresizingMaskIntoConstraints = NO;

Вы, вероятно, следует думать о вертикальных ограничениях на этой этикетке, а также.

Надеюсь, что это поможет.

+0

На самом деле, я включил весь текст сообщения об ошибке. –

+0

до и после «Будет пытаться восстановить ...», вы не видите список ограничений? Вы должны увидеть хотя бы один после и по крайней мере два перед этой строкой. –

+0

Я ... выглядит так, как будто редактор обрабатывал эту часть как разметку, поэтому она не прошла. Я просто переформатировал сообщение, чтобы вы могли его увидеть. –

 Смежные вопросы

  • Нет связанных вопросов^_^