Подтвердить что ты не робот

Изменение рамки программно с автоматическим расположением

У меня есть UITableView с Autolayout, и мне нужно уменьшить высоту, когда GADBannerView появится в нижней части экрана.

К сожалению, с помощью Autolayout невозможно изменить кадр. Решение - удалить Autolayout и установить кадр вручную. Это очень опасно, потому что все мои приложения отлично работают на дисплее 3.5 'и 4.0' и удаляют автоматическую компоновку, вызывая новую фазу тестирования и больше усилий.

Есть ли способ изменить кадр, даже если включена автоматическая компоновка?

4b9b3361

Ответ 1

Пусть ваши ограничения UITableView на нижнем макете установлены на 0, сделайте IBOutlet. Теперь пусть ваша высота GADBannerView равна 40, поэтому измените свой outlet.constant = 40;. Подробнее о том, как сделать IBOutlet и изменить его значение, посмотрите this или this надеюсь, что это поможет.

Изменить: Для тех, кто ищет, например, следуйте этим простым шагам (поскольку это принятый ответ, я думаю, что стоит иметь пример. Кредит @manujmv для этого примера)

  • Создайте ограничение высоты для вашего представления в вашем интерфейсе.

  • Затем добавьте в свой класс объект IBOutlet для этого ограничения. Например:

    @property (слабый, неатомный) IBOutlet NSLayoutConstraint * HeightConstraint;

Подключите этот объект на панели подключения.

  1. Затем измените значение этого ограничения, когда вам нужно

    self.heightConstraint.constant = 40;

Ответ 2

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

  • создайте высоту constarint для вашего представления в вашем интерфейсе.
  • Затем добавьте в свой класс объект IBOutlet для этого ограничения. например,

     @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
    

    Подключите этот объект на панели подключения.

  • Затем измените значение этого ограничения, когда вам нужно

     self.heightConstraint.constant = 40;
    

Ответ 3

Еще одна вещь, вы должны вызвать метод [self.view layoutIfNeeded]; после изменения ограничений.

Наслаждайтесь:)