2015-06-29 7 views
3

Так как я очень новичок в программировании на ios, у меня больше вопросов общего дизайна. У меня есть ViewController, который содержит GraphView (UIScrollView + UIView), который отлично работает. Когда я поворачиваюсь к пейзажу, я хочу, чтобы GraphView изменял его высоту до высоты дисплея (так что он заполняет весь экран), но только 300 точек в портрете.Лучший способ изменения размера UIView при повороте в ландшафт и обратно

То, что я сделал до сих пор реализует viewWillLayoutSubviews в ViewController и сбрасывают ограничения:

- (void)viewWillLayoutSubviews{   
_graphViewHeightConstraint.constant = ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) ? 300:[[UIScreen mainScreen] bounds].size.height-self.navigationController.navigationBar.frame.size.height - 2*_distanceToTopView.constant; 
} 

и в GraphView.m:

- (void)layoutSubviews{ 
kGraphHeight = self.frame.size.height; 
[self setNeedsDisplay]; 
} 

(потому что мне нужна переменная kGraphHeight в коде для рисования графика). Это не похоже на очень элегантное решение, поэтому я хотел спросить, какой будет лучший способ? Большое спасибо за ваши входы :)

ответ

2

В GraphView.m

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    kViewWidth = <GET_SCREEN_WIDTH_HERE>; 
    kViewHeight = <GET_SCREEN_HEIGHT_HERE>; 
    [self updateViewDimensions]; 
} 

и updateViewDimensions метод установит кадр UIScrollView и UIView

- (void)updateViewDimensions 
{ 
    scrollView.frame = self.view.frame; 
    yourView.frame = CGRectMake(kViewXStartsFrom, kViewYStartsFrom, kViewWidth, kViewHeight); 
} 

после поворота вид на пейзаж viewDidLayoutSubviews будет вызываться.

Это работает для меня.