Xcode6 beta6으로 기존 iOS 프로젝트를 열었고 Xcode는 Storyboard 및 Xib 파일 모두에 대해 다음 경고를 나열합니다.
8.0 이전의 iOS 버전에서는 자동 기본 최대 레이아웃 너비를 사용할 수 없습니다.
아래와 같이 너비를 명시 적으로 설정하여 경고를 해결하려고했습니다.
그러나 이것은 경고를 해결하지 못했습니다. 그것들을 어떻게 제거 할 수 있습니까?
Xcode6 beta6으로 기존 iOS 프로젝트를 열었고 Xcode는 Storyboard 및 Xib 파일 모두에 대해 다음 경고를 나열합니다.
8.0 이전의 iOS 버전에서는 자동 기본 최대 레이아웃 너비를 사용할 수 없습니다.
아래와 같이 너비를 명시 적으로 설정하여 경고를 해결하려고했습니다.
그러나 이것은 경고를 해결하지 못했습니다. 그것들을 어떻게 제거 할 수 있습니까?
답변:
업데이트 3 : 배포 대상이 7.1로 설정된 경우 1 이외의 값으로 설정된
레이블에 의해이 경고가 트리거 될 수도 있습니다 numberOfLines
. 이것은 새로운 단일 뷰 프로젝트로 완전히 재현 가능합니다.
재현 단계 :
다음 레이더를 제출했습니다 :
rdar : // problem / 18700567
업데이트 2 :
불행히도, 이것은 Xcode 6의 릴리스 버전에서 다시 한 번 발생합니다. 대부분 문제를 해결하기 위해 스토리 보드 / xib를 수동으로 편집 할 수 있습니다. 아래의 의견에서 Per Charles A . :
우연히이 경고를 쉽게 소개 할 수 있으며 경고 자체는 범인이라는 레이블을 찾는 데 도움이되지 않습니다. 복잡한 스토리 보드에서는 불행합니다. 스토리 보드를 소스 파일로 열고 정규식
<label(?!.*preferredMaxLayoutWidth)
으로 검색 하여 preferredMaxLayoutWidth 속성 / 값이 생략 된 레이블을 찾을 수 있습니다. 이러한 행에 preferredMaxLayoutWidth = "0"을 추가하면 명시 적으로 표시하고 값을 0으로 설정하는 것과 같습니다.
업데이트 1 :
이 버그는 Xcode 6 GM에서 수정되었습니다.
원래 답변
이것은 Xcode6-Beta6 및 XCode6-Beta7의 버그이며 현재로서는 무시해도됩니다.
Apple 개발자 포럼의 Apple 엔지니어 는 버그에 대해 다음 과 같이 말했습니다.
기본 최대 레이아웃 너비는 UILabel의 자동 레이아웃 속성으로 컨텐츠에 맞게 자동으로 세로로 커질 수 있습니다. 6.0 이전의 Xcode 버전은 디자인 타임에 여러 줄 레이블에 대한 maximumMaxLayoutWidth를 현재 경계 크기로 설정했습니다. 가로 레이아웃이 변경된 경우 런타임에 preferredMaxLayoutWidth를 수동으로 업데이트해야합니다.
iOS 8은 런타임에 preferredMaxLayoutWidth를 자동으로 계산하는 기능을 추가하여 여러 줄 레이블을 훨씬 쉽게 만들 수 있습니다. 이 설정은 iOS 7과 역 호환되지 않습니다. iOS 7 및 iOS 8을 모두 지원하기 위해 Xcode 6을 사용하면 크기 검사기에서 preferredMaxLayoutWidth에 대해 "자동"또는 "명시 적"을 선택할 수 있습니다. 당신은해야합니다 :
최상의 경험을 위해 iOS 8을 대상으로하는 경우 "자동"을 선택하십시오. <iOS 8을 타겟팅하는 경우 "명시 적"을 선택하십시오. 그런 다음 설정하려는 preferredMaxLayoutWidth의 값을 입력 할 수 있습니다. "명시 적"을 활성화하면 기본적으로 상자를 선택할 때 현재 범위 크기가 설정됩니다.
(1) 자동 레이아웃을 사용하고 (2) 여러 줄 레이블에 대해 "자동"을 설정 한 경우 [라벨의 크기 관리자에서이를 확인할 수 있음] 및 (3) 배포 대상 <iOS 8.
이 경고는 자동 레이아웃이 아닌 문서에 나타납니다. 이 경고가 표시되고 자동 레이아웃을 사용하지 않으면 경고를 무시할 수 있습니다.
또는 문제의 스토리 보드 또는 xib에서 파일 관리자를 사용하여 문제를 해결하고 "빌드 대상"을 "iOS 8.0 이상의 빌드"로 변경하십시오.
<label(?!.*preferredMaxLayoutWidth)
으로 검색 하여 preferredMaxLayoutWidth
속성 / 값 을 생략하는 레이블을 찾을 수 있습니다. preferredMaxLayoutWidth="0"
이러한 행 을 추가하면 명시 적으로 표시하고 값을 설정하는 것과 같습니다 0
.
numberOfLines
.1 이외의 값으로 설정 하면 설정 여부에 관계없이 경고가 발생 preferredMaxLayoutWidth
합니다.
preferredMaxLayoutWidth
명시 적 0으로 설정 하면 numberOfLines
값에 관계없이 경고가 사라 집니다. 그러나 오늘 아침 Xcode 업데이트에서 수정되었을 것입니까?
큰 스토리 보드에서 문제 레이블을 찾으려면 아래 단계를 따르십시오.
다음으로 스토리 보드를 소스 파일로 공개하십시오.
검색. 내용을 보면 여기에서 어떤 레이블인지 쉽게 알 수 있어야합니다.
레이블을 찾으면 나를 위해 일한 솔루션은 "선호 너비"를 0으로 설정하는 것이 었습니다.
BTW에서는 항상 항목을 선택하고 식별 관리자 아래에서 인터페이스 항목의 ID를 신속하게 얻을 수 있습니다. 매우 편리합니다.
스토리 보드를 소스로 열지 않고도이 문제 를 해결할 수 있습니다 . numberOfLines! = 1이고 배치 대상이 <8.0 인 경우 UILabels에 의해이 경고가 트리거됩니다.
그것을 찾는 방법?
해결책은 매우 간단합니다
iOS 8 이상에서 빌드를 사용하도록 설정하십시오.
이제 내 Xcode 버전은 6.1입니다. 그러나 나는이 경고도 받았다. 그것은 나를 많이 귀찮게합니다. 몇 번이고 검색 한 후 해결책을 찾았습니다.
이유 : 스토리 보드에서 UILabel Lines> 1을 설정해야합니다.
솔루션 : 스토리 보드에서 UILabel Lines 속성을 1로 설정하십시오. Xcode를 다시 시작하십시오. 그것은 나를 위해 일하고, 더 많은 사람들을 도울 수 있기를 바랍니다.
단어를 한 줄 이상 표시해야하는 경우. 코드에서해야합니다.
//the words will show in UILabel
NSString *testString = @"Today I wanna set the line to multiple lines. bla bla ...... Today I wanna set the line to multiple lines. bla bla ......"
[self.UserNameLabel setNumberOfLines:0];
self.UserNameLabel.lineBreakMode = NSLineBreakByWordWrapping;
UIFont *font = [UIFont systemFontOfSize:12];
//Here I set the Label max width to 200, height to 60
CGSize size = CGSizeMake(200, 60);
CGRect labelRect = [testString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName] context:nil];
self.UserNameLabel.frame = CGRectMake(self.UserNameLabel.frame.origin.x, self.UserNameLabel.frame.origin.y, labelRect.size.width, labelRect.size.height);
self.UserNameLabel.text = testString;
W / H 선택에서 가지고 있던 원래 레이아웃을 선택하여 작동하게했습니다. 스토리 보드가 예상대로 작동하고 오류가 사라졌습니다.
iOS 8.0 용으로 개발중인지도 확인하십시오. 프로젝트의 일반 설정에서 확인하십시오.
나는이 문제가 있었고 레이블의 최대 값을 결정하기 위해 제약 조건을 추가하여 문제를 해결할 수있었습니다.
여러 줄 레이블을 놓을 때 부모 뷰 내부에 너비를 적용하기 위해 구속 조건이 설정되지 않았습니다. 새로운 PreferredMaxWidth가 시작됩니다. iOS 7 및 이전 버전에서는 최대 너비를 직접 정의해야합니다. 레이블의 왼쪽과 오른쪽에 10px 제약 조건을 추가했습니다.
<= width 제약 조건을 추가하여 문제를 해결할 수도 있습니다.
따라서 이것은 실제로 버그가 아니며 최대 너비를 직접 정의하면됩니다. 다른 답변에서 명시 적 옵션 언급은이 너비 값을 설정할 때도 작동하지만 부모 너비를 기준으로 최대 너비를 변경하려면 너비를 명시 적으로 설정해야 하므로이 값을 수정해야합니다.
위의 솔루션은 부모보기의 크기에 관계없이 너비가 항상 유지되도록합니다.