Обязательно включите:
self.navigationController.navigationBar.hidden = YES;
И:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
И:
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
Оно должно выглядеть так:
- (void)viewWillAppear:(BOOL)animated {
self.navigationController.navigationBar.hidden = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}
Оказывается, мой подход верен. Я устанавливал неверное значение для размера кадра, поэтому я не получал ожидаемого поведения. Doh.
Этот код
NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];
[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after resizing: %@", NSStringFromRect([subView frame]));
действительно дает ожидаемый результат:
[...] subview's frame before resizing: {{0, 0}, {100, 100}} [...] subview's frame after resizing: {{0, 0}, {200, 100}}
Ваша проблема в другом месте. Я ожидаю, что одно из ваших представлений контейнера не является частью иерархии представлений окна в то время, когда происходит изменение размера.
Хорошим решением вашей проблемы может быть использование NSTabView без вкладок, потому что тогда все ваши представления все время находятся в окне (возможно, скрыты), а вкладка обеспечивает изменение размера.
Другое решение - разместить несколько представлений друг над другом и использовать setHidden:
для отображения только одного.