UIView проблема авторазмера - PullRequest
1 голос
/ 13 марта 2011

У меня есть иерархия представлений, подобная этой:

UIView
  - ADBannerView
  - UIImageView
  - UILabel
  - UIButton
  - UINavigationController
    - UIView

Я загружаю вид изображения, метку и кнопку из файла пера и UINavigationController из другого пера.У всех есть маски авторазмера.Я создаю ADBannerView программно.

Теперь моя проблема в том, что я хотел бы, чтобы изображение, метка, кнопка перемещались вниз, а контроллер навигации уменьшался при вставке ADBannerView.Однако этого не происходит, вместо этого ADBannerView помещается поверх изображения и метки.

Кто-нибудь может мне объяснить, что я здесь не так делаю?

Ответы [ 2 ]

3 голосов
/ 13 марта 2011

Другими словами, чтобы заставить эти вещи «автоматически» сдвигаться вниз, когда вы вставляете в ADBannerView, вам нужно заключить их в их собственное представление, а затем изменить размер и положение этого представления.Предполагая, что ADBannerView имеет высоту 50 пикселей, вам нужно переместить этот UIView вниз на 50 пикселей и уменьшить его высоту на 50 пикселей.

Предполагая, что self.enclosingView - это новое представление, которое вы будете использовать для вложения изображения, ярлык и кнопка ... и при условии, что вы хотите сделать это анимированным (вы, вероятно, делаете, это обычно выглядит намного лучше):

// Start the AdBannerView off of the top of the screen
CGRect adFrame = self.bannerView.frame;
adFrame.origin.x = 0.0;
adFrame.origin.y = 0.0 - adFrame.size.height;
self.bannerView.frame = adFrame;

[UIView beginAnimations:@"Show Ads" context:nil];

// Animate the shrinking of the enclosing view
CGRect enclosingFrame = self.enclosingView.frame;
enclosingFrame.size.height -= self.bannerView.frame.size.height;
enclosingFrame.origin.y += self.bannerView.frame.size.height;
self.enclosingView.frame = enclosingFrame;

// Animate the motion of the bannerView into view
adFrame.origin.y = 0.0;
self.bannerView.frame = adFrame;

[UIView commitAnimations];
1 голос
/ 13 марта 2011

Маска авторазмера определяет изменения размера при смене кадра родительского элемента, а не при вставке / удалении родного брата. Вы должны настроить кадр для соответствующих видов программно. Кенни Уайлэнд уже дал вам представление о том, как этого можно добиться с меньшей болью. Взгляните на метод CGRectDivide - с его помощью легко разделить доступное пространство между двумя представлениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...