2014-01-08 2 views
0

iOS7 이전에는 UIView의 프레임에 정의한 CGRect가 무엇이든지 작동했습니다. 예를 들어UIViewController에 거의 항상 layoutSubViews가 필요한 이유는 무엇입니까?

:

imageView.frame=CGRectMake(20,20,80,80); 

하는 것은 완벽하게 화면의 좌측 상단에 20 × 20 마진을 떠난다.

내가 함께 다른 UIView의 추가 흥미롭게 경우 :

nextView.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+10,20,100,100); 

nextView이 이미지 뷰에 나타납니다, 그래서 그것은 어떻게 든 두 번째보기를 X 매개 변수를 허용하지만이 Y도 해당 뷰 좌표를 허용하지 않습니다.

이제 모든 좌표를 정렬하려면 viewWillLayoutSubviews을 사용해야합니다. 그렇지 않은 경우, 예를 들어, imageView의 프레임은 자동으로 0,0,80,80이됩니다. 내가 어떤 코코아 콩을 사용하지 않는 오전 나는 또한 심지어 CGRectloadView 전이나 viewDidLoad을 설정하는 사용자 정의 initWithFrame 방법 UIViewController을 만드는 시도했지만 문제가되지 않습니다

(는 맨 왼쪽 스냅).

Views의 x, y를 자동으로 무 시하는 것이 있습니까? 자동 레이아웃 시스템 등? viewWillLayoutSubviews 메서드를 사용하여 이러한 좌표를 모두 다시 정렬하지 않으려합니다.

여기 무슨 일입니까?

업데이트 1

- (id)initWithFrame:(CGRect) frame 
{ 
    self = [super init]; 
    if (self) { 

     self.frame=frame; //frame is custom variable to hold it until loadViews method 

    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 
-(void)loadView{ 
    UIView *view=[[UIView alloc]initWithFrame:_frame]; 

    view.backgroundColor=[UIColor blackColor]; 
    self.imageView=[[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 80,80)]; 
    self.imageView.backgroundColor=[UIColor redColor]; 

    [view addSubview:_imageView]; 

    self.textView=[[UITextView alloc]initWithFrame:CGRectMake(self.imageView.frame.origin.x+self.imageView.frame.size.width+10, self.imageView.frame.origin.y, view.frame.size.width-20-(self.imageView.frame.origin.x+self.imageView.frame.size.width+10), view.frame.size.height-self.imageView.frame.origin.y-20)]; 
    [view addSubview:_textView]; 

    self.view=view; 
} 

나는 initWithFrame와도있는 viewDidLoad에서 유사한 코드를 시도했다. 결과는 동일했다.

업데이트 2

내가 실수로 대신 문제 "viewWillLayoutSubviews"의 "layoutSubviews"를 작성했습니다, 그래서 그것을 고정 : 나는 정의의 UIView 만의 UIViewController를 생성하고 있지 않다, 그래서 "viewWillLayoutSubviews해야했다 "질문에.

+0

스토리 뷰에서 스토리 뷰를 정의하는 방법은 무엇입니까? – ldindu

+0

imageView 대신 imageView.bound를 설정하십시오.frame – CoolMonster

+0

@ldindu 스토리 보드를 사용하고 있지 않습니다. 코드에서 모든 뷰를 수동으로 만드는 사용자 정의 UIViewController입니다. – frankish

답변

0

제 생각 엔 상태 표시 줄을 왼쪽 상단으로 되돌릴 수 있습니다.하지만 iOS7에서는 상태가 투명합니다. 상단 점은 화면의 왼쪽 상단입니다.

당신은 당신의 좌표를 변경하거나 컨트롤러보기에이를 추가 할 수 있습니다 :이 상태 표시 줄의 맨 아래에 왼쪽 맨 위 지점을 재설정합니다

if([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) 
    { 
     [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
    } 

합니다.

어떤 방법, 나는 그 방법에 레이아웃 코드를 넣어 믿고 :

- (void)viewWillLayoutSubviews 
- (void)viewDidLayoutSubviews 
+0

setEdgesForExtendedLayout을 시도했지만 작동하지 않았습니다. origin.y에 200px를 입력해도 작동하지 않습니다. 따라서 200px에서 상태 표시 줄의 높이 등을 뺀 후에도 상단으로 스냅하지 않아야합니다. viewWillLayoutSubviews에서 떨어져 있으려고합니다. 그래서 x, y 값을 0으로 재설정하는 것을 찾으려고합니다. -/ – frankish

+0

로드 뷰에서보기의 프레임은 무엇이며,이 코드를 viewDidLoad로 이동하면 어떻게됩니까? – shannoga

+0

뷰의 프레임을 CGRectMake (0, 0, 320, 200)로 설정했습니다. 이 코드를 viewDidLoad로 이동해도 아무 것도 바뀌지 않습니다. 뷰의 프레임을 viewWillLayoutSubviews로 복사하면 예상대로 작동합니다. – frankish

0

하위 뷰가 추가 될 때마다하는있는 UIScrollView이 스크롤, 프레임보기, layoutSubViews 설정되어?

+0

나는 UIScrollView를 사용 했었지만 실제로는 사용하지 않기를 바랬다. – frankish

관련 문제