Можно ли использовать UINavigationController таким образом, чтобы он не использовал полное окно?
Я попытался установить его рамку просмотра, а также добавить его к другому (не полноэкранному) представлению вместо окна, и ни один из них не работает.
Можно ли использовать UINavigationController таким образом, чтобы он не использовал полное окно?
Я попытался установить его рамку просмотра, а также добавить его к другому (не полноэкранному) представлению вместо окна, и ни один из них не работает.
Вы не можете напрямую изменить размер UINavigationController или его subviews напрямую, так как UINavigationController автоматически изменяет их размер до полного экрана, независимо от того, для чего установлены их рамки. Единственный способ, которым я смог преодолеть это до сих пор, заключается в следующем:
Сначала создайте экземпляр UINavigationController, как обычно:
UINavigationController *nc = [[UINavigationController alloc] init];
self.navController = nc;
[nc release];
Затем создайте экземпляр UIView, ограниченный желаемым размером:
UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, DESIRED_HEIGHT)];
navView.clipsToBounds = YES;
[navView addSubview:self.navController.view];
[self.view addSubview:navView];
[navView release];
Для свойства navView clipsToBounds должно быть установлено значение YES, или UINavigationController и его просмотр по-прежнему будут отображаться в полноэкранном режиме. Затем добавьте UINavigationController в это ограниченное представление. Этот UIView может быть добавлен в представление UIViewController, как показано выше.
Следует отметить, что любые представления UIViewController, добавленные в UINavigationController, будут иметь свой контент, ограниченный границами navView, а не фрейм подразделов, добавленных в UINavigationController, поэтому содержимое в каждом подвью должно быть создано правильно отображение для границ навигации.
В любом случае этот метод действительно работает, поскольку я создал приложение, которое его успешно использует. Единственным другим способом, с которым я когда-либо работал, является создание настраиваемого класса контроллера навигации с нуля, дублирование функций UINavigationController, но без автоматического изменения размера (что я также делал в прошлом), и это может быть боль. Надеюсь, это поможет.
Это мой первый пост, хотя я изучал огромное количество этого сообщества. Поэтому я хотел поблагодарить всех вас за это.
Мой вызов и причина, по которой я публикую здесь, заключалась в том, чтобы ответить на этот вопрос и реорганизовать его для моих нужд, используя iOS5 и раскадровки. Это решение, вероятно, не будет хорошо работать для старых реализаций, но я думал, что все равно опубликую его.
Вот что я получил, и он работает хорошо (приложение для iPad). Все это настроено на моем UIViewController по умолчанию, установленном как root в представлении раскадровки.
Надеюсь, что это поможет!
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
/*vars:
rightSideView is the containing view - this is where the UINavigationController will sit, along with it view stack
myStoryboard is self-explanatory I think
myViewController is identified as in storyboard as "accountView", to be pulled from the storyboard and used as the rootview
*/
//Steps
//Add subview to this controller view (for positioning)
UIView *rightSideView = [[UIView alloc]initWithFrame:CGRectMake(30, 30, 500, 600)];
rightSideView.clipsToBounds = YES;//this little baby makes sure that the damn navigation bar clips!!
rightSideView.backgroundColor = [UIColor grayColor];//so I can see it
//instantiate view controller for nav controller root view
UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
UIViewController *myViewController = [myStoryboard instantiateViewControllerWithIdentifier:@"accountView"];
//create NavController
UINavigationController *myNavController = [[UINavigationController alloc]initWithRootViewController:myViewController];
//Add navController as one of my child ViewControllers
[self addChildViewController:myNavController];
//Add NavController view into my constrained view
[rightSideView addSubview:myNavController.view];
//Finally, add right side view as a subview of myself
[self.view addSubview:rightSideView];
}
Это может помочь?
Добавление UINavigationController в качестве подзадачи UIView
Вы всегда можете использовать класс UINavigationBar напрямую и сами реализовать управляющий код.
Трудно ответить, потому что это сложно.
На iPhone у вас не может быть UINavigationController, который короче экрана. Поэтому, если вы хотите показать рекламный баннер, покажите его над нижней панелью инструментов или под верхней навигационной панелью.
На iPad у вас могут быть два UINavigationControllers бок о бок, но в моем случае они по-прежнему занимают всю высоту экрана. Учитывая поведение iPhone, я не пытался изменить поведение высоты на iPad.