2013-11-20 1 views
1

У меня проблема с моим приложением, когда я изменяю ориентацию в viewController. Если я получу в этом представлении контроллер в портретном режиме (ширина 320) и перейду на пейзаж, то кажется, что активна только 320 ширины ландшафтного режима, а остальная часть экрана кажется мертвой. Я попытался обновить view.Frame, когда ориентация изменилась, но она не сработала. Кто-нибудь может мне с этим помочь?Просмотр ограничений не обновляется после изменения ориентации IOS

- (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation{ 
     if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
     { 
    // Portrait 

     self.view.frame=CGRectMake(0,0,320,500); 
     self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"smallerView2.png"]]; 

     self.thumbScrollView.frame = CGRectMake(20,100, 280, 72); 

     self.rightThumbArrow.frame=CGRectMake(1,107, self.rightThumbArrow.bounds.size.width, self.rightThumbArrow.bounds.size.height); 

     self.leftThumbArrow.frame=CGRectMake(self.view.bounds.size.width-30,107, self.leftThumbArrow.bounds.size.width, self.leftThumbArrow.bounds.size.height); 

     self.bigImageView.frame=CGRectMake(20,200, 280, 200); 

     self.previousPicBar.frame=CGRectMake(19,200, 10, 198); 

     self.nextPicBar.frame=CGRectMake(291,200, 10, 198); 

     self.leftArrowBtn.frame=CGRectMake(20,294, 8, 10); 

     self.rightArrowBtn.frame=CGRectMake(292,294, 8, 10); 



} 

else 
{ 
    // Landscape 



     self.view.frame=CGRectMake(0, 0, 500, 320); 

     NSLog(@"%f %f %f %f",self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds.size.height); 

     self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"smallerView2Landscape.png"]]; 

     self.thumbScrollView.frame = CGRectMake(30,60, 520, 60); 

     self.rightThumbArrow.frame=CGRectMake(10,65, self.rightThumbArrow.bounds.size.width, self.rightThumbArrow.bounds.size.height); 

     self.leftThumbArrow.frame=CGRectMake(self.view.bounds.size.width-45,65, self.leftThumbArrow.bounds.size.width, self.leftThumbArrow.bounds.size.height); 

     self.bigImageView.frame=CGRectMake(120,120, 350, 140); 

     self.previousPicBar.frame=CGRectMake(119,122, 10, 136); 

     self.nextPicBar.frame=CGRectMake(461,122, 10, 136); 

     self.leftArrowBtn.frame=CGRectMake(120,180, 8, 10); 

     self.rightArrowBtn.frame=CGRectMake(462,180, 8, 10); 


} 
} 

- (void)viewWillAppear:(BOOL)animated{ 
     [super viewWillAppear:animated]; 

     [self updateLayoutForNewOrientation:self.interfaceOrientation]; 
} 

- (void)willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration{ 
     [self updateLayoutForNewOrientation:self.interfaceOrientation]; 
} 
+0

Как вы изменили view.frame? Можете ли вы опубликовать код? В каком методе вы это сделали? –

+0

Я редактировал свой вопрос с помощью некоторого кода. – hoya21

ответ

0

Существует несоответствие в настройке и получении координат. вы устанавливаете рамку в - (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation, а в NSLog вы печатаете с использованием связанного.

Правильный способ получить ширину, следящие

NSLog(@"x= %f y= %f w= %f h=%f",self.view.frame.origin.x, 
self.view.frame.origin.y, self.view.frame.size.width, 
self.view.frame.size.height); 

код

NSLog(@"%f %f %f %f",self.view.bounds.origin.x, 
self.view.bounds.origin.y, self.view.bounds.size.width, 
self.view.bounds.size.height); 

Изменение связанного с рамой или наоборот.

+0

Я отправил весь код, который обрабатывает ориентацию. Других деталей нет. Странно, что когда я печатаю ширину self.view, она дает мне правильную ширину. Хотя, когда я печатаю координаты события касания, он достигает только до 320 ширины, а затем ничего не печатается. – hoya21

0

Пользователь, который ответил мне, имел право. Мне пришлось изменить способ, которым я устанавливал x, y, width, height.

Изменение

self.view.frame=CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds 
            .size.height); 

С

self.view.frame=CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame 
            .size.height); 

и добавление

[self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight]; 

в методе viewDidLoad сделал разницу.

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