2013-07-17 5 views
4

난 쉽게 (나는 그것으로 이미 몇 시간이야!)이를 알아 내려고 시간 (그렇지 않으면 일)를 보낼 수UIView의 자동 크기는

을 내가 파단 (첨부 된 그래픽 참조)를 포함하는 UIView의이 그것은 심지어 서브 뷰로 추가되기 전에 만들어진 것입니다. 특정 시점에서

enter image description here

, 내가있는 UITableViewCell에 하위 뷰보기로 추가합니다. 나는

[tableViewCell.contentView addSubview:mySubview] 
    //.... 
[mySubview setBounds:tableViewCell.contentView.bounds] 

를 호출하고 내 하위 뷰를 초기화하기 때 내가 가진 :

내 그래픽에서
[self setAutoresizesSubviews:YES] 

, 당신은 내가 오직 폭의 변화 가정하고 볼 수 있습니다. 원래의 원본을 유지하면서 mySubview의 오른쪽 뷰를 전체 너비로 확장하려면 어떻게해야합니까?

나는이 모든 생각에 쉽게 접근 할 수 있었고 어떤 제안도 환영합니다! 당신의 도움을 주셔서 대단히

편집 감사합니다, 칸 구엔

내가 이전에 명시된 바와 같이 내가 (정의 V2로하고,) V1을 초기화하기 때

그래서, 내가 V1의 크기를 알 수 없습니다.

나는 나는 이런 식으로 뭔가 할 수있는 가정입니다에 v1을 배치 할 경계 아는 경우 : (때를

[v1 setBounds:(some CGRECT)]; 
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; 

또는 CI 그냥 최대한 빨리 인스턴스화로 V2에 autoresizingMask 설정을 여전히 v1의 크기를 모르는 경우)? 당신이보기 v1이있는 경우

+0

몇 가지 질문 : 1. autolayout을 사용하고 있습니까? 2. 자동 레이아웃을 사용하고 있지 않습니까? – Andrea

+0

회신 해 주셔서 감사합니다. @Andrea. 내가 말할 수있는 것은 xib 파일의 스토리 보드를 사용하지 않고 (모든 것이 프로그래밍 방식으로 수행되고있다.) autolayout을 사용하거나 사용하지 않기를 선언했다. – Adam

+0

호스팅 된보기 (mySubview)의 자동 실행 마스크를 설정 했습니까? – Andrea

답변

1

, 그 하위 뷰 v2하고 폭의 변화가 v1 크기를 조정할 때 동안 v2가, 왼쪽 가장자리 고정 갖고 싶어 (즉 v1의 오른쪽 가장자리와 v2의 오른쪽 가장자리 사이의 거리가 일정하다) 이것을 사용

v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; 

스위프트의 경우 :

기본적으로
v2.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleBottomMargin] 

, autoresizesSubviews은 YES입니다. 설정하지 않아도됩니다.

편집

모든보기는 당신이 (당신이 그것을 알고 싶다면 그냥 NSLog을)를 모르더라도, 크기를 가지고있다. 뷰가 방금 init'ed되었을 경우, 그 치수는 (0, 0) 가능성이 있습니다. autoresizesSubviews이 경우에도 일뿐입니다. 서브 뷰와 수퍼 뷰 사이에 필요한 간격을 알고있는 한.

예를 들어, v1이있는 경우, 다음이

// v1 has been initialized, and its dimensions are unknown (to you) 
// It's probably (0, 0), but that doesn't matter 
// 30px = 10px + 20px 
v2.frame = CGRectMake(10, 0, v1.bounds.size.width - 30, 100); 
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; 

v2.frame 일부 음수로 설정됩니다 세 번째 행을 할 것입니다 v2 오른쪽 여백에 왼쪽 여백과 20 픽셀에 대한 v1에서 10px되어 원하는 처음에 크기가 0이고 처음에 v1의 프레임이 적절한 크기 (사용자 또는 UITableViewCell)로 설정된 경우 v2은 자동 크기 제한 때문에 크기가 조정되어 달성하고자하는 것과 정확히 일치합니다.

+0

이것은 도움이 될만한 질문입니다. 내가 뭘하는지, v1의 일부 알 수없는 컨텍스트에서 subView v2에 initWithFrame입니다. 마침내 v1에서 setBounds를 수행하고 v2가 자동으로 넓어 져야합니까? 슈퍼 프레임이 정의되기 전에 initWithFrame : CGRectMake (110,10, super.frame.size.width, super.frame.size.height)를 수행했습니다. – Adam

+0

이 줄이 호출되는 순간'v1'과'v2'의 정확한 크기를 알아야합니다. 그 라인 이후에,'v1' 너비의 변화는'v2'로 전파됩니다. –

+0

편집보기 Khanh – Adam