Xcode 9 에서 아이 폰 X 를 맞 추 면 iOS 10 이 호 환 되 지 않 는 문제 해결 방법
얼마 전에 테스트 팀 이 bug 를 제출 한 것 을 발 견 했 습 니 다.어떤 레이아웃 은 iOS 11 에서 정상 적 이지 않 고 iOS 10 에서 정상 적 이지 않다 고 합 니 다.각각 iOS 11 시 뮬 레이 터 와 iOS 10.3 시 뮬 레이 터 에서 app 을 뛰 어 보 니 과연 다음 그림 과 같다.
iOS 11 에서'성시 방송국'을 클릭 하면 다음 메뉴 의 버튼 이 정상적으로 표 시 됩 니 다.
iOS 10 에서'성시 방송국'을 클릭 하면 다음 메뉴 가 공백 으로 표 시 됩 니 다.
해결 방법
코드 를 검사 한 결과,다음 메뉴 의 단 추 는 scroll view 에 수 동 레이아웃 으로 동적 으로 추 가 된 것 을 발견 하 였 습 니 다.추가 할 때 단추 의 프레임 워 크 를 지 정 했 습 니 다.프레임 워 크 계산 이 정상 입 니 다.단 추 는 scroll view 의 subviews 에 추가 되 었 습 니 다(LLDB 에서 po 명령 으로 확인 할 수 있 습 니 다).또한 subviews 를 인쇄 하 는 과정 에서 이 단추 들 의 frame 은 변경 되 지 않 았 고 initWithframe 에서 설정 한 값 이지 만 iOS 10.3 에 서 는 표시 되 지 않 고 보기 디 버 거 로 도 볼 수 없습니다.
아무리 생각해 도 이해 가 되 지 않 는 다.나중에 Xcode 9 가 아이 폰 X 에 맞 게 자동 레이아웃 제약 을 바 꾸 었 다 는 것 을 연 상 했 습 니 다.예 를 들 어'안전 구역'이라는 개념 을 연 상 했 기 때문에 새로운 iOS SDK 가 ScrollView 의 일부 레이아웃 속성 을 수정 한 것 으로 의심 되 었 습 니 다.
두 가지 시 뮬 레이 터 의 scroll view 속성 을 인쇄 한 결과 iOS 10/11 에서 scroll view 의 contentInset 속성 이 다 릅 니 다.
iOS 11 에서 contentInset 의 값 은(0,0,0,0)인 데 iOS 10 에 서 는(64,0,0,0,0)이 되 었 다.
그래서 코드 에 한 마디 를 추가 하려 고 했 습 니 다.
if ([UIDevice currentDevice].systemVersion.floatValue < 11.0) {
_scrollBar.contentInset = UIEdgeInsetsZero;
}
iOS 10 아래 메뉴 가 나 오 더 라 고요!이런 방식 은 어느 정도 문 제 를 해 결 했 지만 철저 하지 않 았 다.테스트 에서 iOS 10 의 레이아웃 문제 가 가끔 발생 하 는 것 으로 나 타 났 다(특히 view contrller 가 처음 불 러 올 때).2 급 메뉴 는 네트워크 로 딩 을 해 야 하기 때문에 이 로 딩 속도 가 빠 르 고 느 릴 수 있 습 니 다.첫 번 째 페이지 가 완 료 된 후에 2 급 메뉴 가 표시 되 었 을 수도 있 습 니 다.자동 레이아웃 엔진 이 계산 을 완료 하지 않 았 을 수도 있 습 니 다.scroll view 의 contentInset 값 을 다시 수정 할 수도 있 습 니 다.페이지 에서 처음 로 딩 할 때 메뉴 가 표시 되 지 않 습 니 다.
이 문 제 를 해결 하려 면 반드시 다른 방식 을 생각해 야 한다.예 를 들 어 UIScrollViewDelegate 프로 토 콜.
먼저 view controller 를 UIScrollViewDelegate 구현 으로 설명 합 니 다.
<UIScrollViewDelegate>
scroll view 의 delegate 의뢰 설정:
_scrollBar.delegate = self;
그리고 scrollViewDidScroll 의뢰 방법 을 실현 합 니 다.
// MARK: - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView == _scrollBar && scrollView.contentOffset.y != 0){
_scrollBar.contentInset = UIEdgeInsetsZero;
}
}
app 을 실행 하면 이번 문 제 는 완벽 하 게 해결 되 었 습 니 다.메모:모든 UIScrollView 하위 클래스 에 문제 가 있 습 니 다.IB 로 레이아웃 을 한다 면 Align to Edges 를 사용 할 때 기본 적 인 Safe Area 가 아 닌 슈퍼 뷰 에 사방 을 정렬 해 야 합 니 다.그렇지 않 으 면 이 문제 가 발생 할 수 있 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Xcode 9 에서 아이 폰 X 를 맞 추 면 iOS 10 이 호 환 되 지 않 는 문제 해결 방법코드 를 검사 한 결과,다음 메뉴 의 단 추 는 scroll view 에 수 동 레이아웃 으로 동적 으로 추 가 된 것 을 발견 하 였 습 니 다.추가 할 때 단추 의 프레임 워 크 를 지 정 했 습 니 다.프레임 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.