Как работает авторазмер в iPhone SDK? - PullRequest
2 голосов
/ 05 июня 2010

Я пытаюсь сделать следующее:

альтернативный текст http://img101.imageshack.us/img101/7396/33959221.png

Мне нужно сделать много пользовательских вещей, поэтому я все подклассирую.

альтернативный текст http://img248.imageshack.us/img248/4201/49422483.png

У меня проблемы с авторазмером и позиционированием. Например, UIToolBar не в правильном положении. Итак, вот вопрос: Если вы не используете UITableViewController или любой другой контроллер, который позаботится обо всем позиционировании и размере, то вам придется сделать это самостоятельно. Может кто-нибудь сказать мне, как это работает? Что мне нужно понять?

---- ОБНОВЛЕНИЕ:

Мои собственные цели на самом деле не так важны, так как мой вопрос на самом деле о другом. Но хорошо. Таким образом, все «элементы», такие как TableView, панель инструментов и TabBar, будут иметь собственные фоны и использовать пользовательские кнопки. TableView будет GroupedStyle, и группы могут быть свернуты.

Мой вопрос заключается в том, как мне структурировать мой код, особенно в отношении позиционирования и автоматического изменения размера, чтобы добиться того, что вы видите на рисунке №1.

Вот как это устроено сейчас:

Application Delegate:
- (void) loadView {
  RootViewController *rootView = [[RootViewController alloc] init];
  [window addSubview:rootView.view];
  [window makeKeyAndVisible];

RootViewController:
- (void) loadView {
  self.theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
  self.theView.autoresizesSubviews = YES;
  self.theView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
  self.view = self.theView;

  ChildViewController *childView = [[ChildViewController alloc] init];

  [self.view addSubview:childView.view];

ChildViewController:
- (void) loadView {
  self.theView = [[UIView alloc] init];
  self.view = self.theView;
}
- (void) viewDidLoad {
  self.view.frame = [[UIScreen mainScreen] bounds];
  CGRect toolbarBounds = self.theToolbar.bounds;
  CGRect viewBounds = self.view.bounds;
  CGRect tableViewBounds = CGRectMake(0, CGRectGetHeight(toolbarBounds), CGRectGetWidth(viewBounds), CGRectGetHeight(viewBounds) - CGRectGetHeight(toolbarBounds));

  self.view.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);

  self.theTableView = [[MyTableView alloc] initWithFrame:tableViewBounds 
                                                  style:UITableViewStyleGrouped 
                                                 parent:self];


  [self.view addSubview:self.theToolbar];
  [self.view addSubview:self.theTableView];
}

MyToolBar:
- (id)initWithParent:(id)theParent {
  if ((self = [self init])) {    
    self.parent = theParent;

    CGRect rectArea = CGRectMake(0, 0, CGRectGetWidth([[[self parent] view] bounds]), 44);
    [self setFrame:rectArea];

    self.autoresizingMask = UIViewAutoresizingFlexibleWidth;

    [self loadButtons];
  }
  return self;
}

Так вот как позиционирование сейчас структурировано (грязно). Это на самом деле работает, НО У меня есть ModalView, который обрабатывается ChildViewController. Когда у меня есть iPad в книжной ориентации, я выскакиваю модальное изображение и отклоняю его, тогда все работает. Но когда я делаю то же самое в альбомном виде, он поворачивает дырочный вид ... ChildViewController на 90 градусов при отклонении модального вида. Очень странно. Когда я непосредственно загружаю ChildViewController в свой AppDelegate, то снова все работает нормально.

1 Ответ

1 голос
/ 08 октября 2011

Например, вам не хватает опции UIViewAutoresizingF FlexibleBottomMargin в маске авторазмера панели инструментов.

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