2013-06-24 2 views
0

У меня есть следующий код:Почему, когда я сделал свое ограничение относительно нижней части супервизора, он работал с вершины супервизора? И теперь это правильно?

self.noArticlesView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.frame.size.height)]; 
UIImage *backgroundPattern = [UIImage imageNamed:@"no-articles-background.png"]; 
self.noArticlesView.backgroundColor = [UIColor colorWithPatternImage:backgroundPattern]; 

[self.view addSubview:self.noArticlesView]; 

UIImage *noArticlesImage = [UIImage imageNamed:@"no-articles-icon.png"]; 
UIImageView *noArticlesImageView = [[UIImageView alloc] initWithImage:noArticlesImage]; 
noArticlesImageView.translatesAutoresizingMaskIntoConstraints = NO; 

[self.noArticlesView addSubview:noArticlesImageView]; 

NSLayoutConstraint *horizontalCenterConstraint = [NSLayoutConstraint constraintWithItem:noArticlesImageView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.noArticlesView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]; 
[self.noArticlesView addConstraint:horizontalCenterConstraint]; 

NSLayoutConstraint *verticalPlacementConstrant = [NSLayoutConstraint constraintWithItem:noArticlesImageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.noArticlesView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-230.0]; 
[self.noArticlesView addConstraint:verticalPlacementConstrant]; 

В принципе, я добавляю вид (так называемый noArticlesView) на вершине зрения контроллера представления, и это представление отображает сообщение о том, что нет контента в настоящее время добавил (в случай, которого нет, конечно).

Для этого я добавляю изображение в качестве подсмотра в качестве индикатора этого.

Но когда я изменяю выше ограничение на изображение, чтобы иметь свойство toItem:self.view и добавить его в self.view вместо self.noArticlesView он толкает его с верхней точки зрения, а не в нижней части (т.е. 200, как константа будет толкать его 200px от верхней).

Я получил его разобрали, установив ограничение на изображении по сравнению с noArticlesView вместо self.view, но я до сих пор интересно, за поведение (я все еще учусь Auto Layout и хочу, чтобы получить представление о нем).


Кроме того, что я сейчас делаю правильно? Если я хочу, чтобы он был расположен на 230 пикселей ниже, задает константу -230 пути? Устанавливает константы как отрицательную плохую форму или что-то еще?

ответ

1

У меня тоже были такие странные вещи, и я подозреваю, что это потому, что супервизор (в вашем случае self.view) не имеет высоты - он не изменяется в зависимости от его взглядов. Это означает, что нижняя часть self.view равна вершине, что делает ее похожей на ограничение работы сверху. Вы можете попробовать две вещи, чтобы проверить эту теорию:

  1. Осмотреть раму self.view «s (высота будет 0)
  2. Set self.view.clipsToBounds = YES (ваши мнения, в том числе на фоне зрения, не будет показывать, потому что они обрезано)

Это (или может быть) только объяснение того, что происходит, я не уверен, какой правильный способ справиться с этим.

Что касается вашего другого вопроса, то это вполне справедливо для этого, хотя зачастую это лучший способ сделать это. Спросите себя, «почему это -230»? Если это потому, что изображение 230 высотой, используйте -noArticlesImage.size.height. Если 230 просто оказывается числом, которое делает весь вид наилучшим, его можно использовать (хотя лучшая практика диктует использование макроса константы или препроцессора для определения 230).

+0

Не удалось запросить лучший ответ. 230 действительно просто волшебное число, но я буду помнить об этом, спасибо. :) –

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