2017-10-21 1 views
0

xcode 9.0.0을 사용하고 있습니다. 다른보기에 적용된 여러 사용자 지정 클래스가 있습니다. 실제 크기 이상의 장치에서 프로젝트를 실행할 때마다 완벽한 뷰를 보여주고 시뮬레이터에서 빌드하면 오른쪽에서 레이아웃이 압박됩니다. 이것은 모든 UIView 유형에서 발생합니다. 예를 아래에 제공합니다. 여기xcode 9 시뮬레이터 레이아웃 오작동

enter image description here

, 나는 그라데이션을 적용하고, 그러나 오른쪽에 일부가 탈락된다. 그리고 이것은 모든 관점에서 발생합니다. 위의 예에 대한 코드는 다음과 같습니다.

func addBlackGradientLayer(frame: CGRect){ 
    let gradient = CAGradientLayer() 
    gradient.frame = frame 
    gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor] 
    gradient.locations = [0.0, 1.0] 
    self.layer.addSublayer(gradient) 
} 

나는 지금 모든 단서를 완전히 벗어났습니다. 어떤 도움을 많이 주시면 감사하겠습니다.

+0

충돌하거나 부족한 제약 조건에 대한 경고를 받고 있습니까? 어떤 제약 조건을 설정 했습니까? 표시된 코드는 어디에서 호출하고 있습니까? – Paulw11

+0

어디에서이 함수를 호출합니까? 'view'의'frame'이 완전히 배치되기 전에 그것을 호출 할 가능성이 큽니다. – Paolo

+0

@ Paulw11 자동 크기 조정/누락 된 제약 조건 추가/자체 제약 조건 설정. 또한 제약 조건에 대해 경고하지 않습니다. 지금도 이미지는 자동 레이아웃이며 경고/문제가 없습니다. –

답변

2

나는 당신이 viewDidAppear에서 호출해야 viewWillAppear

을이를 호출하고, 그것은 그렇게 간단합니다.

이것은 고전적인 "잡았다"입니다!

PaulW11이 이미 답변을주었습니다. 이제 막 Google 직원을 도와 드리겠습니다. viewWillAppear에서


은 분명 충분히보기 아직 등장하지하지만 것입니다.

viewDidAppear에서보기 은 실제로는 문자 그대로으로 표시됩니다. 즉, 절대적으로 의심의 여지없이 모든 것이 화면에 있으며, 물론 완전히 배치되어 있다는 것을 의미합니다. 규칙으로

당신이 취미 아이폰 OS 프로그래머라면

, 단지 "일반적"으로 오직 viewDidAppear 사용합니다.

99 %의 경우에서 "일상적인 해결책"입니다.

viewWillAppear 및 viewDidLayoutSubviews 및 viewDidLoad는 전문적인 용도로만 사용하는 것이 합리적입니다. 가장 미묘한 관련성이없는 것 이외의 "나쁜 것은 발생하지 않습니다."예를 들어, 성능 효과는 viewDidAppear을 사용하는 경우에만 발생합니다. 따라서 간단히 말해 항상 viewDidAppear을 사용하십시오.

viewDidLayoutSubviews 등의 미묘한 차이점은 버전에 따라 조금씩 다르며 autolayout 등의 구체적인 세부 정보가 포함 된 큰 질문입니다. 이 품질 보증의 범위를 벗어납니다.

나는 애플이 "일반 대중"에 대한 viewDidLayoutSubviews 및 viewWillAppear 및 viewDidLoad를 그렇게 눈에 잘 띄지 않아야한다고 거의 말할 것입니다. 예를 들어, 초심자 또는 애호가 프로그래머라면 CALayer와 같은 것을 사용하거나 주위를 건 드리거나 자신의 제스처를 만들고 전이 애니메이션을 조작 할 필요가 없습니다.

마찬가지로 실제로 viewDidLayoutSubviews 또는 viewWillAppear 또는 viewDidLoad를 사용할 필요가 전혀 없습니다. 단지 "viewDidAppear"을 사용하십시오. (몇 가지 경우에 필요합니다) 모든 설정이 완료되었습니다.

BTW 컨테이너보기에 항상 사용해야하는 컨테이너보기 (컨테이너보기에서는 epic tutorial입니다!)가 있습니다. 이런 종류의 UI 경주장 문제는 거의 발생하지 않습니다.

+0

'viewDidAppear'과'viewWillAppear'과'viewDidLayoutSubviews'는이 경우 어떻게 다른가요? –

+0

안녕하세요, 저는 @AakashDave에게 질문에 답변했습니다. (어떤 이유로) 세부 사항을 원한다면 방대한 양의 기사, 기술적 인 Apple 대화 등이 있습니다. – Fattie