2014-05-15 2 views
0

두 개의 클래스가 있습니다.레이아웃 : 시각적 형식으로 속성을 사용하는 방법

부모 클래스는 속성이 있습니다 :

@interface ParentVC 

    @property (nonatomic, strong) UIImageView* logoImageView; 
@end 

그래서, 지금은 출력 서브 클래스의 레이아웃 제약이보기가 필요합니다.

@interface ChildVC : ParentVC 
@end 

시각적 형식의 형식 문자열을 수정하는 방법은 무엇입니까?

@"V:|-(%i)-[self.logoImageView]" // wrong 

나는 해결책을 발견 :

UIView* selfLogoImageView = self.logoImageView; 

@"V:|-(%i)-[selfLogoImageView]" 

을하지만 새로운 변수없이 어떠한 방법이 있나요?

+0

나는이 질문을 이해하지 못한다. 또한 (부모) 수퍼 뷰가 아닌 왜 서브 뷰가 레이아웃 작업을 수행하는 이유는 무엇입니까? – trojanfoe

+0

서브 클래스의'self.property' 접근 자 및 레이아웃 제약의 시각적 형식 – gaussblurinc

답변

1

시각적 형식 언어를 사용하고 있으므로 [NSLayoutConstraint constraintsWithVisualFormat:options:metrics:views]도 사용하고 있습니다. 이 메서드는 views: 매개 변수의 사전을 필요로합니다. NSDictionaryOfVariableBindings을 사용하고 있습니까? 그렇다면 꼭 그렇게 할 필요는 없습니다. 시각적 형식 문자열에서 사용하는 이름으로보기를 매핑하는 한 오래된 사전을 전달할 수 있습니다. 덧붙여, %i 형식 지정자로 수행하는 작업 대신 메트릭 사전을 전달할 수도 있습니다.

NSDictionary *views = @{ @"logo" : self.logoImageView, // use any name you want here 
         @"label" : self.someLabelView }; 

// kSomeSpacerConstant is an int or float primitive constant. 
// We are wrapping it in @() because this dictionary needs NSNumbers as values. 
NSDictionary *metrics = @{ @"spacer" : @(kSomeSpacerConstant) }; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(spacer)-[logo]-[label]" 
                    options:0 
                    metrics:metrics 
                    views:views]]; 

NSDictionary은 당신의 측정이나 뷰를 개최 할 수 있도록하지 않으려면 그냥 metrics: 또는 views: 매개 변수에 대한 문자 @{ ... } 구문에 전달합니다. (그러나 더 깨끗한 코드를 위해, 또는 하나 이상의 비주얼 포맷 스트링을 만들고 사전을 재사용하고 싶다면 어드바이스해라.)

+0

감사합니다! 좋은 설명 – gaussblurinc

+0

나는 리터럴 사전을 사용하는 것에 대해 조금 이해하지 못한다. 그들은 어쨌든'[NSDictionary dictionaryWith ...]'를 부르는 것과 어떻게 다른가요? – trojanfoe

+0

'dictionaryWithObjectsAndKeys :'는 매개 변수의 순서가'object, key'이기 때문에 항상 혼란 스러웠습니다. 객체와 키의 차이에 대한 내부적 인 표시가 없었습니다 (둘 다 리터럴 문자열 인 경우 기억해야만했습니다) , 당신은 그것을 종결 짓지 않는 것을 기억해야만했습니다. '@ {key : value}'구문은 JSON과 매우 흡사하며 읽기가 훨씬 쉽습니다. 그것은 라이온과 iOS 5에서 소개 된 컴파일 타임의 문법적 설탕입니다. [here] (http://nshipster.com/at-compiler-directives/)와 [here] (http://nshipster.com/object- 첨자 /). –