У меня есть UIView в IB, в котором есть еще один UIView, который я использую в виде контейнера. В коде я создаю три разных представления, а затем анимируем соответствующий вид контейнера в зависимости от состояния приложения. Только одно из трех разных видов будет действительным в любой момент времени. Проблема в том, что когда я запускаю на другом iPhone в симуляторе, мои новые объекты не масштабируются в соответствии с представлением контейнера. Я использую автозапуск. Для целей тестирования я настроил свои подзаголовки просто как большую кнопку, у которой все ее края ограничены супервидом. И в представлении контейнера также есть края, ограниченные этим супервидом. Я хочу, чтобы subview соответствовал представлению контейнера. т.е. кнопка растягивает весь размер представления контейнера. При запуске на разных iPhones размер представления контейнера и, следовательно, subview должен масштабироваться пропорционально различным размерам экрана iPhone.
Ниже приведен код, который я использую для инициализации моего подсмотра и установки его ограничений относительно представления контейнера.
UIView *containerView = self.subView;
UIView *newSubview = [[mySubview alloc] init];
[newSubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.containerView addSubview:newSubview];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]];
Я просто не могу заставить это работать. Я новичок в автозапуске и не уверен, что я делаю неправильно, и хотел бы перестать ударить головой об эту стену. Любая помощь будет потрясающей.:)
************* ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ **************
Извините, я не заявлял о своей проблеме так четко, как мог. Итак, вот еще несколько снимков экрана. Во-первых, я опишу, что я сделал по коду.
В didFinishLaunchingWithOptions в AppDelegate.m я создаю MyViewController, как это,
self.myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
В viewDidLoad в MyViewController.m я создаю mySubview и добавляю его в свой контейнерный вид и создаю для него такие ограничения,
UIView *containerView = self.containerView;
UIView *mySubview = [[MySubview alloc] init];
[mySubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[containerView addSubview:mySubview];
NSDictionary *views = NSDictionaryOfVariableBindings(mySubview);
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mySubview]|"
options:0
metrics:nil
views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mySubview]|"
options:0
metrics:nil
views:views]];
И, наконец, в init в MySubview.h я добавляю nib как подзаголовок, подобный этому,
- (id)init
{
if(self = [super init])
{
NSArray *nibArray = [[NSBundle mainBundle]loadNibNamed:@"MySubview" owner:self options:nil];
[self addSubview:[nibArray objectAtIndex:0]];
}
return self;
}
Несколько замечаний, которые могут помочь,
В MyViewController.xib у меня есть UIView, который я использую в качестве контейнера. Он имеет IBOutlet для UIView * containerView и является ссылкой, указанной выше. Единственные ограничения, которые у меня есть для containerView в IB, - это ведущее, конечное и нижнее пространство Superview и верхнее пространство для Superview = 44.
Для MySubview.xib высота и ширина 300, (ограничения не используются для высоты или ширины). Я чувствую, что эти размеры не должны иметь значения, поскольку mySubview должен ограничиваться контейнером.
В MySubview.xib у меня есть 3 объекта, topButton: height = 29, middleView: height = 242 и bottomButton: height = 29. (см. прикрепленное изображение) TopButton имеет ведущие, конечные и верхние ограничения Superview, а нижнее - среднее ограничение. Средство MiddleView имеет ведущие и завершающие ограничения Superview и ограничение topButton и ограничения нижнего уровня к нижнему баттону. И, наконец, bottomButton имеет ведущие, конечные и нижние ограничения Superview и ограничение top to middleView.
Я хочу, чтобы mySubview масштабировался, чтобы соответствовать контейнеру, поскольку ограничения были созданы и добавлены, но вместо этого mySubview получает очень большой и клип containerView.
Вот несколько снимков экрана:
MyViewController.xib, синий прямоугольник под заголовком - мой контейнерный вид и имеет контейнер контейнера IBOutlet.
MySubview.xib
И, наконец, результат, который неверен.
Вместо этого я хотел бы этого, что я подделал, чтобы получить снимок экрана.
На iPhone 4,
На iPhone 5,
Как вы можете видеть в фальшивых снимках экрана, mySubview масштабируется, чтобы соответствовать контейнеру, даже если контейнерView немного масштабируется для настройки различных размеров экрана телефона.
Надеюсь, я не перешел за борт с информацией. Любая помощь будет потрясающей. Я чувствую, что я рядом, но должен упустить один ключевой шаг. Grrrrr.