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
이됩니다. 내가 어떤 코코아 콩을 사용하지 않는 오전 나는 또한 심지어 CGRect
loadView
전이나 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해야했다 "질문에.
스토리 뷰에서 스토리 뷰를 정의하는 방법은 무엇입니까? – ldindu
imageView 대신 imageView.bound를 설정하십시오.frame – CoolMonster
@ldindu 스토리 보드를 사용하고 있지 않습니다. 코드에서 모든 뷰를 수동으로 만드는 사용자 정의 UIViewController입니다. – frankish