Центрировать пользовательский UIView вертикально и горизонтально с помощью Auto Layout

Я пытаюсь создать довольно простой анимированный пользовательский интерфейс, используя новый API-интерфейс Auto Layout API, недавно доступный для iOS 6. У пользовательского представления, которое я создаю, есть круг, который я хочу как вертикально, так и горизонтально.

К сожалению, я не могу понять, почему мои ограничения, похоже, отлично работают для UIButton и элементов UILabel, но приносят странные результаты, когда я использую пользовательский вид с пользовательским CALayer (в этом случае круг, который в конечном итоге будет анимироваться).

Чтобы быть ясным, я не хочу, чтобы мое представление расширялось, чтобы заполнить весь экран, а скорее иметь динамическое «дополнение», чтобы представление было вертикально центрировано как на iPhone 4, так и на 5. Я также должен отметить, что я очень новый для Cocoa и UIKit.

RootViewController.m:

... - (void)viewDidLoad { [super viewDidLoad]; // Create Circle View CGRect circle_view_rect = CGRectMake(0, 0, 100, 100); UIView *circle_view = [[UIView alloc] initWithFrame:circle_view_rect]; // Create Circle Layer CircleLayer *circle_layer = [[CircleLayer alloc] init]; circle_layer.needsDisplayOnBoundsChange = YES; circle_layer.frame = circle_view.bounds; [circle_view.layer addSublayer:circle_layer]; // Enable Auto Layout [circle_view setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.view addSubview:circle_view]; // Center Vertically NSLayoutConstraint *centerYConstraint = [NSLayoutConstraint constraintWithItem:circle_view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]; [self.view addConstraint:centerYConstraint]; // Center Horizontally NSLayoutConstraint *centerXConstraint = [NSLayoutConstraint constraintWithItem:circle_view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]; [self.view addConstraint:centerXConstraint]; } ... 

CircleLayer.m:

 ... - (void)drawInContext:(CGContextRef)context { CGContextAddArc(context, 50, 50, 50, 0.0, 2*M_PI, 0); CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor); CGContextFillPath(context); } ... 

В основном ограничения, которые я реализовал:

  • центр вертикально внутри родительского вида
  • центр горизонтально внутри родительского вида

И это результат, который я получаю:

Круг не центрирован с помощью автоматической компоновки

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

благодаря

Попробуйте добавить ограничение по высоте и ширине в circle_view. Я даже не мог получить просто квадратный вид боли, чтобы появиться вообще, не добавляя их (используя ваш код, минус материал слоя).

 NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:circle_view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:100.0]; [circle_view addConstraint:heightConstraint]; NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:circle_view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:100.0]; [circle_view addConstraint:widthConstraint]; 

Чтобы добавить к ответу rdelmar:

Основная проблема заключается в том, что как только вы перейдете по пути NSLayoutConstraint и укажите setTranslatesAutoresizingMaskIntoConstraints:NO , кадр, который вы сделали с CGRectMake имеет значения для целей AutoLayout. Вот почему он не использовал информацию по высоте и ширине кадра.

  • Изображение в tableviewcell не появляется сразу
  • Двоичный оператор '|' не может применяться к двум операндам UIViewAutoresizing
  • Как добавить / сохранить контрольную сумму в файле?
  • Swift, если позволяет успешно оценивать значение по умолчанию (nil)
  • Swizzling и супер
  • Как получить данные среза огромного видеофайла
  • Как «упростить» UIImagePickerController
  • Внутренняя тень с базовой графикой
  • Как разместить UITableViewCell в нижней части экрана?
  • Как получить значение nsuserdefault в других viewcontrollers
  • Применение маски CAShapeLayer к UIView
  • Interesting Posts

    iOS Получить страну, в которой находится пользователь устройства

    Сделать UIViewController синглом?

    removeObserver с NSNotification … что я делаю неправильно?

    Изменение цвета кнопки «Назад» на панели навигации

    проведите по экрану в UITableView, который будет внедрен в UIScrollView

    Segue пуст (черный), не может просматривать данные

    Разделение сенсорной последовательности между несколькими экземплярами UIGestureRecognizer

    Когда сделано doReceiveMemoryWarning

    Отключить и представить контроллер просмотра в Swift

    Предупреждения Xcode 7: объектный файл был создан для новой версии iOS, чем связанный

    Советы по реализации сервера для разработки сервера / клиента iOS App?

    fbDidLogin не вызывается – iOS

    Как я могу реализовать отключенные параметры приложения?

    Правильный способ сохранения / сериализации пользовательских объектов в iOS

    Ультравизуальное приложение для iPhone, такое как прокрутка UIView или UITableView

    Давайте будем гением компьютера.