1

Настройка: «VC1» создает «NavigationVC» с контроллером корневого представления «VC2» и представляет его с использованием стиля представления UIModalPresentationFormSheet. «VC2» появляется внутри навигационного контроллера в середине экрана с правильным размером.Измененный контроллер навигации представлен modally UIModalPresentationFormSheet при каждом нажатии каждого контроллера нового вида

Вопрос: Поскольку я продолжаю нажимать контроллеры представлений на модальный NavVC, я бы хотел, чтобы они изменяли размер. NSLog моего preferredContentSize в каждом контроллере представления, который нажат, проверяет правильность моих ограничений и размеры на самом деле разные. Однако я много экспериментировал и не понял, как изменить размер модальности после его представления.

@implementation VC1() 

- (void) viewDidLoad{ 
    VC1* vc1 = [self getNextVC]; 
    NavVC* navVC = [[UINavigationViewController alloc] initWithRootViewController:vc1]; 
    [navVC setModalPresentationStyle:UIModalPresentationFormSheet]; 
    [self presentViewController:navVC animated:YES completion:nil]; 
} 

@end 

@implementation NavVC() 

- (CGSize) preferredContentSize{ 
    CGSize size = [[self topViewController] preferredContentSize]; 
    return size; 
} 

@end 


@implementation VC2() 

- (CGSize) preferredContentSize{ 
    CGSize size = [[self view] systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return size; 
} 

@end 

ответ

4

Я потратил некоторое время на решение той же проблемы. Нажатие контроллера вида на модульном навигационном контроллере для iOS8 привел к тому, что контроллер вида с таким же размером, как контроллер корневого представления, в то время как для iOS7 этот второй контроллер представления имел размер по умолчанию для модальной формы (540.f, 620.f) , Только рабочий раствор, я мог бы придумать до сих пор, как для iOS7 и iOS8 выглядит следующим образом:

ViewController1.m

@interface ViewController1() 

@end 

@implementation ViewController1 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.navigationController.view.superview.bounds = CGRectMake(0, 0, VC1_WIDTH, VC1_HEIGHT); 
} 

- (void)nextTapped:(id)sender { 
    ViewController2 *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"ViewController2"]; 
    [self.navigationController pushViewController:vc2 animated:NO]; 
    // call after push 
    self.navigationController.view.superview.bounds = CGRectMake(0, 0,VC2_WIDTH,VC2_HEIGHT); 
} 

@end 

Представляем ViewController1:

ViewController1 *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"ViewController1"]; 
    UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:vc1]; 
    navVC.modalPresentationStyle = UIModalPresentationFormSheet; 
    [self presentViewController:navVC animated:NO completion:nil]; 

ViewController2.m

#import "ViewController2.h” 

@interface ViewController2() 

@end 

@implementation ViewController2 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.navigationController.view.superview.bounds = CGRectMake(0, 0, VC2_WIDTH, VC2_HEIGHT); 
} 

- (void)nextTapped:(id)sender { 
    ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"ViewController3”]; 
    [self.navigationController pushViewController:vc3 animated:NO]; 
    self.navigationController.view.superview.bounds = CGRectMake(0, 0,VC3_WIDTH,VC3_HEIGHT); 
} 

- (void)backTapped:(id)sender { 
    self.navigationController.view.superview.bounds = CGRectMake(0, 0,VC1_WIDTH,VC1_HEIGHT); 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

@end 

ViewController3.m

#import "ViewController3.h” 

@interface ViewController3() 

@end 

@implementation ViewController3 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.navigationController.view.superview.bounds = CGRectMake(0, 0, VC3_WIDTH, VC3_HEIGHT); 
} 

- (void)backTapped:(id)sender { 
    self.navigationController.view.superview.bounds = CGRectMake(0, 0,VC2_WIDTH,VC2_HEIGHT); 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

@end 

Обратите внимание: если вы добавляете поля ввода текста в эти контроллеры представлений, перемещаемых на модовой навигационном контроллере, для iOS8 презентация и увольнение клавиатуры автоматически изменят размер до нужного размера. К сожалению, у меня все еще нет правильного исправления этой проблемы.

+0

Вы можете исправить проблему с текстовым полем, установив navigationController? .preferredContentSize = CGSize (width: preferredContentSize.width, height: preferredContentSize.height) в viewWillAppear –

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