문제

Xcode 인터페이스를 작성기 문제
개인적으로 좋아하지 않는 방식으로 인터페이스 빌더에서 작동 Xcode.이 예제에서 내가 만들려고 매우 복잡한 보기 컨트롤러입니다.에 viewDidLoad 뷰 컨트롤러를 보여 사용자 지정 경고 보기(로 같은).그것이 실제로는 경고 보기는 하지만 더보기를 보여주는 사용자가 몇 가지 정보를 제공합니다.가 흐릿한 배경보기와 이 상단에.나가 창조하는 것을 시도하는 경우에는 이 인터페이스에서 빌더가 지나치게 복잡할 수 없습니다를 선택합망에서 배경과 그들을 이동 등없이 삭제 하위가 잘못된 경로로 전망하고 그에...

시나리오
내가 하려는 것은 보기를 만드는 일부 레이블과 하나의 버튼이 있습니다.뷰 컨트롤러에는 어려움 속에 기반한 것입니다 이것은 다른 텍스트에서는 레이블/금액의 레이블이 있습니다.
I.e.Easy--3 라벨
하드--4 라벨

내가 만들 dimmedView 고 경고하(스타일)보기 다음과 같다:

// Setup the dimmedView
UIView *dimmedView = [[UIView alloc] initWithFrame:self.view.frame];
dimmedView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];

// Setup the startingAlertView
UIView *startingAlertView = [[UIView alloc] init];
startingAlertView.backgroundColor = [UIColor whiteColor];

나는 그들이 세/네이블에 기초한 논리 및 추가 필요 라벨 startingAlertView 논리에 근거한다.

하는 문제 눈에 띄는 시점에서 프레임이 보기에 대한 설정한다.이 의미는 그것을 반환 0,0,0,0.고 싶은 일이 일어날 전망을 필요한 높이에 따라 레이블에 추가됩니다.

내가 건축한 IOS7 및 자동차를 사용하여 레이아웃이 있습니다.나는 설정을 제약하는 것을 조정 관련 높이고 위치에서 볼 수?

도움이 되었습니까?

해결책

내가 건축한 IOS7 및 자동차를 사용하여 레이아웃이 있습니다.나는 설정을 제약하는 것을 조정 관련 높이고 위치에서 볼 수?

그렇습니다.당신이 사용하지 않는 initWithFrame: 에서 자동차,레이아웃거나 오히려 당신은 수 있지만,프레임은 무시됩니다.만들기의 흐리게 하기와 프레임의 CGRectZero, 정 translatesAutoresizingMasksToConstraints NO,추가 메인 보고를 만들 제약 조건을 고정하면 그것은 모두의 가장자리 뷰.

그 후,추가의 경고 보기는,다시 프레임의 제고 translates... 속성을 설정하는 아니다.제약 조건을 만들 센터 이 보기에서 당신의 흐리게 하기 보기입니다.이보기를 얻을 것이다 그것의 크기에서 그것의 하위,이후 레이블이 있는 본질적인 크기.

추가 귀하의 상표로 하위의 보기,프레임의 제고 translates... 아니요로 설정되어 있습니다.의 콘텐츠에 따라할 수 있을 설정하는 기본 레이아웃을 최대 폭 또는 폭 제약 조건이 있습니다.

제약 조건을 만들 고정 귀하의 상표를 왼쪽과 오른쪽의 가장자리는 데 도움과 라이닝의 라벨에서 수직'stack'.각각의 경우에 추가할 수 있습니다 여백을 제공하는 경고의 테두리입니다.

이처럼 보일 수 있습니 많은 양의 코드,그래서 당신은 수 있습니다 원하는 기사를 읽고 난에 기록 visual 형식에 대한 자동차 레이아웃만약 코드, 와 관련된 자동 레이아웃 편의 카테고리 당신의 인생을 더 쉽습니다.

다른 팁

만약 당신이 자동차 레이아웃의 경로를 추가할 수 있습니다 다음은 제약 조건을 유지하는 적절한 공간 사이의 각 라벨,그리고 적절한 공간 사이의 상단과 하단의 보기와 함께 첫 번째와 마지막 레이블이 있습니다.그러나,당신이하지 않은 경우에서 이렇게 하는 인터페이스를 작성기,당신이뿐만 아니라 건너뛰기를 사용하여 자동 레이아웃도하기 때문에,그것은 매우 간단하여 단의 높이를 조정기를 추가할 때 레이블이 있습니다.

을 시작하여 설정 높이의 전망의 크기는 위쪽 및 아래쪽 공간에 당신이 원하는 주변의 레이블이 있습니다.한 다음 각 시간에 당신은 레이블을 추가,추가 그것의 높이는 라벨을 더 높이 공간의 당신이 레이블이 있습니다.

당신은 또한 때까지 기다리를 추가한 모든 상표는,당신이 원하는 다음 설정 높이 바닥 상표의 y 위치를 더 높이스 하단할 공간을 주는 레이블이 있습니다.

예를 사용하여,레이아웃을 얻을 수 있는 범위를 부모에서 보기입니다.

여기에 빠른 예는 우리가 사용하고 있지 않은 프레임,그리고 사용하 CGRectZero 에 대한 우리의 UILabels,위치에서 오 updateConstraints 대신 합니다.내가 사용하고 Visual 형식 언어 라벨 레이아웃을 나는 추천 하는 경우에 당신은 그것을 사용하여 프로그래밍 방식으로.

여기서 우리는 레이블의 폭 부모를 보고 그런 다음 그 위에 쌓인다.

#import "View.h"

@implementation View{
    UILabel *_label1;
    UILabel *_label2;
    UILabel *_label3;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _label1 = [[UILabel alloc] initWithFrame:CGRectZero];
        _label1.translatesAutoresizingMaskIntoConstraints = NO;
        _label1.text = @"LABEL 1";

        _label2 = [[UILabel alloc] initWithFrame:CGRectZero];
        _label2.translatesAutoresizingMaskIntoConstraints = NO;
        _label2.text = @"LABEL 2";

        _label3 = [[UILabel alloc] initWithFrame:CGRectZero];
        _label3.translatesAutoresizingMaskIntoConstraints = NO;
        _label3.text = @"LABEL 3";

        [self addSubview:_label1];
        [self addSubview:_label2];
        [self addSubview:_label3];
    }


    [self updateConstraintsIfNeeded];

    return self;
}

-(void)updateConstraints
{
    [super updateConstraints];

    NSDictionary *_viewsDictionary = NSDictionaryOfVariableBindings(_label1,_label2,_label3);


    // Set the contraintsto span the entire width of the super view
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_label1]-|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:_viewsDictionary];

    [self addConstraints:constraints];

    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_label2]-|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:_viewsDictionary];
    [self addConstraints:constraints];

    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_label3]-|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:_viewsDictionary];

    [self addConstraints:constraints];


    // Last setup the vertical contraints other wise they will end up in a random place
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_label1]-[_label2]-[_label3]"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:_viewsDictionary];
    [self addConstraints:constraints];
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top