2012-01-03 4 views
0

После этого с issue так много часов без везения, я пытаюсь использовать другой подход, создавая представления программно в loadView UIViewController. У меня есть UIToolbar и UITableView в моем UIViewController, но у меня возникли проблемы с калибровкой при добавлении представления в качестве дополнительного представления UIView. Вот что я получил до сих пор:Правильный размер представления UIViewController

В моей пользовательской UIViewController»loadView:

{ 

    [super loadView]; 

    //this doesn't seem right!?!? 
    self.view.frame = CGRectMake(0, 0, 400, 300); 

    //create the Tool Bar 
    self.toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 45.01)]; 

    [self.toolbar setBarStyle:UIBarStyleDefault]; 
    [self.toolbar setAutoresizesSubviews:TRUE]; 
    [self.toolbar setAutoresizingMask:(UIViewAutoresizingFlexibleWidth)]; 

    // create the array to hold the buttons, which then gets added to the toolbar 
    NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:1]; 

    //create buttons 
    UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:nil]; 
    bi.style = UIBarButtonItemStyleBordered; 
    [buttons addObject:bi]; 

    //add buttons to the toolbar 
    [self.toolbar setItems:buttons animated:NO]; 

    //add toolbar to the view 
    [self.view addSubview:self.toolbar]; 


    //create UITableView 
    //a better way setting to set the frame!?!? 
    UITableView* listTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 
                      self.toolbar.bounds.size.height, 
                      self.view.bounds.size.width, 
                      self.view.bounds.size.height - self.toolbar.bounds.size.height) 
                  style:UITableViewStylePlain]; 
    [listTable setAutoresizesSubviews:TRUE]; 
    [listTable setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight)]; 
    [listTable setDataSource:self]; 
    [listTable setDelegate:self]; 

    self.table = listTable; 
    [self.view addSubview:listTable]; 
} 

В loadView RootViewController в():

{ 
    [super loadView]; 

    controller = [[CustomViewController alloc] init]; 
    [self.customView addSubview:controller.view]; 
    [controller.view setAutoresizesSubviews:TRUE]; 
} 

Вы можете увидеть скриншот здесь: https://plus.google.com/u/0/photos/112841433450419935389/albums/5693241484889252817/5693241483569881554

Я новичок в этом, кроме как правильного выбора размера, я на правильном пути?

Большое спасибо.


Edit:

Я пытаюсь создать представление, как этот

  • UIViewController
    • UINavigationBar
    • UIView < < на левой стороне, пользовательский UIViewController с UIToolbar и UITableView
    • UIView < < справа, так же, как и выше

Это один близка к тому, что я пытаюсь сделать, за исключением того, что у меня будет два UITableView и нет сегментированные кнопок. https://plus.google.com/u/0/photos/112841433450419935389/albums/5693241484889252817/5693260341279558818

ответ

0

Из чего я могу вычесть ваш код, вы хотите, чтобы UITableView заполнил весь экран, за исключением панели в верхней части экрана. (Обычно UIToolBar находится в нижней части экрана)

Если вы берете UITableViewController и ставите его как rootViewController UINavigationController, у вас будет отличное поведение и размер.

В UINavigationController баре в верхней части экрана находится navigationBar, и вы можете иметь toolBar на дне с этим вызовом, если вы хотите:

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated 

И View Controller Programming Guide for iOS является хорошим местом для поиска в.

+0

Винс, см. Редактирование выше. Я не могу использовать UINavigationController, потому что мне нужно два UITableView, и каждый из них будет иметь свою собственную панель инструментов. – Eric

+0

@ Эрик, хорошо, из вашего редактирования Я вижу, что вы хотите разместить UIViewControllers внутри другого UIViewController, если только вы не используете iPad с помощью UISplitViewController, что может привести к неприятностям. Обычно это один UIViewController на экран. –

0

Вы сделали некоторые предположения, которые противоречат способу использования UIViewControllers, и я думаю, что несоответствие находится в корне вашей путаницы.

UIViewControllers обычно не управляют размером собственного корневого вида. Их вид изменен его контейнером.Это означает, что контроллер окна или контроллера контейнера, такой как UINavigationController (или пользовательский контроллер представления контейнеров, использующий API iOS 5), управляет кадром представления контроллера.

Попытка регулировки рамки контроллера -loadView вряд ли будет иметь эффект, поскольку кадр представления может быть сброшен, когда представление будет добавлено позже в окно или представление родительского контроллера. Аналогично, контроллер не должен настраивать собственный кадр представления после загрузки представления, поскольку это может конкурировать с поведением его родительского представления -layoutSubviews.

Вместо этого, я думаю, вы хотите, чтобы контроллер вида, в представлении которого есть панель UITableView и UINavigation, которую вы хотите отобразить. Поскольку @VinceBurn предположил, что это похоже на то, что вы хотите, чтобы UINavigationController уже выполнял поведение.

+0

Иона, спасибо за ответ. Если я создаю представления программно, я предполагаю, что мне нужно установить макет представлений сначала до того, как корневой вид будет добавлен к представлению родительского контроллера, правильно ли я? Если да, то где я могу это сделать? – Eric

+0

Вы можете отображать субвью, когда корневой вид создается в '-loadView', вам просто нужно быть готовым к кадру этого корневого представления, чтобы впоследствии изменить его, установив соответствующую маску авторезистирования или внедряя' -layoutSubviews' в пользовательский подкласс UIView. Обратите также внимание, что вы можете столкнуться с неожиданным поведением, если вы гнездите UIViewControllers до iOS 5 или не используете методы контроллера дочернего представления, предоставляемые iOS 5. Я попытался более подробно осветить это на http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/ – Jonah

+0

спасибо за советы и обмен сообщениями. Я только начал с разработки iOS, и мне трудно понять, как работают контроллеры представлений. – Eric

Смежные вопросы