2013-06-25 5 views
2

불편을 끼쳐 드려 죄송 합니다만, 여러 imageViews를 게으른로드하고 UITableView의 내용에 비례하여 크기를 조정하려고합니다. 나는 또한 Autolayout을 기본적으로 처음 사용하기 위해 (아마도 Unwisely?) 노력하고있다. 이 경우 제약 조건이 작동하지 않는 이유를 이해하지 못합니다. 여기에 적절한 이미지를로드 한 후에 UIImageView 크기를 조정하는 데 사용하는 코드가 있습니다.제약 조건을 따르지 않는 프로그래밍 방식의 크기를 가진 Autolayout UIImageView

// Scale the image view and return it. 
- (UIImageView *) scaleImageViewForScreenWidth:(UIImageView *)imageView { 
    UIImage *imgFromView = [imageView image]; 
    CGRect newFrame = CGRectMake(0, 0, imgFromView.size.width, imgFromView.size.height); 

    float imgFactor = newFrame.size.height/newFrame.size.width; 
    newFrame.size.width = [[UIScreen mainScreen] bounds].size.width; 
    newFrame.size.height = newFrame.size.width * imgFactor; 
    [imageView setFrame:newFrame]; 
    return imageView; 
} 

제한 사항에 관한 한. 나는 Label과 UIImageView를 그림자가있는 주 이미지 뷰의 맨 아래에 붙이려고합니다. 다음은 이미지 뷰의 맨 아래 그림자에 적용 할 제한 조건입니다. 그림자의 제약 조건은 다음과 같습니다.

Height Equals: 83 
Align Bottom to: Background Image View 
LeadingSpace to: Table View Cell 

나는 내가 원하는 것을 얻지 못합니다. 어떤 아이디어? 나는 자동 레이 아웃과 싸우고있는 것처럼 느껴진다.

+4

자동 레이아웃의 첫 번째 황금률. 업데이트 프레임 계산과 제약. 두 번째 황금 규칙을 혼합하지 마십시오 제약 일정하지 뷰의 프레임 –

+0

@MaxMacLeod 대답을 게시하고 답변으로 선택하겠다! 그냥 간과 한 것 뿐이다. – Rymnel

답변

9

요청대로! Autolayout을 사용하는 데 도움이되는 몇 가지 지침이 있습니다.

우선 가장 이상적인 방법은 인터페이스 빌더에서 프로그래밍을하지 않아도되도록 설정하는 것입니다. 예를 들어보기의 경계가 변경되면 필요에 따라보기가 자동으로 조정됩니다.

비즈니스를 수행하지 않는 경우 프로그래밍 방식으로 제약 조건을 업데이트해야 할 수 있습니다. 이제 내가 언급 한 황금률은 제약 조건을 업데이트한다는 것입니다. 기본 UIView 프레임을 업데이트하려는 유혹에 저항하십시오!

_myWidthConstraint.constant = 300.f; 

주의해야 할 다음 일은 당신이 특정 장소에서이 작업을 수행해야한다는 것입니다, 그것은 당신의 UIView 서브 클래스 방법 updateConstraints에 있습니다 :

그래서처럼 당신이 뭔가를 할 수 있습니다

- (void)updateConstraints 
{ 
    [super updateConstraints]; 
    _myWidthConstraint.constant = 300.f; 
} 

어떻게 실행하나요? 호출 함 :

[self setNeedsUpdateConstraints]; 

희망이 있습니다. 자세한 정보는 Ole Begemann의 우수 논문 10 Things You Need To Know About Cocoa Autolayout을 확인하십시오.

WWDC 비디오를 잊지 마세요. 이것은 필수적입니다!

또한 이제 책이 iOS Auto Layout Demystified입니다. 내가 그것을 구입했지만, 나는 아직 그것을 읽을 기회가 없었습니다. 그래도 꽤 좋아 보인다.

+1

단순히 프레임을 설정하는 코드를 호출하는 대신 그 셀의 높이를 설정해야한다. 모든 것이 완벽하게 작동합니다. 와우.너무 쉬웠다. 감사! – Rymnel

+0

굉장해! 잘 했어. –

1

나는 또한 동일한 문제에 직면했다. 이미지 뷰 내부의 이미지가 너무 커서 이미지 뷰에는 contentModeAspectFill으로 설정되었습니다.

나는 '자동 크기 파단. "선택을 취소 에 의해이 문제를 해결 enter image description here

관련 문제