iPhone XS max 와 iPhone X R 에 적합 한 방법 예시

9.18 업데이트:테스트 를 통 해 iOS 12 가 비 앞머리 스크린 safeArea 의 값 을 수정 한 것 을 발견 하 였 습 니 다!아이 폰 6 세로 화면 을 가 져 온 경우 iOS 11 에서 돌아 온 safearea Insets 는(0,0,0,0,0)입 니 다.iOS 12 에서 돌아 오 는 safearea Insets 는(20,0,0,0)입 니 다.예,이 top-20 은 상태 표시 줄 입 니 다.여기 서 여러분 은 safeareaInsets 를 맹목적 으로 사용 하지 말고 제 아래 의 유사 한 앞머리 판단 방법 으로 앞머리 화면 을 구분 한 다음 에 safeareaInsets 를 사용 할 지 여 부 를 결정 해 야 합 니 다.
올해 의 세 가지 새 휴대 전 화 는 이미 발표 되 었 고,게다가 Xcode 10 은 이미 GM Seed 버 전 을 발 표 했 으 며,시 뮬 레이 터 를 사용 하여 새 기기 에 적합 할 수 있 으 니 빨리 시작 하 세 요!
세 가지 핸드폰 의 화면 크기

사진 홈 페이지 주소
위 는 픽 셀 단위 입 니 다.그리고 우 리 는 대응 하 는 배 수 를 찾 아-점 pt 로 환산 합 니 다.

사진 홈 페이지 주소
마지막 획득:
iPhone XS 375812pt*
iPhone XR 414896pt*
iPhone X 414896pt*
결론 적 으로 X 는 이미 XS 와 함께 있 기 때문에 기본적으로 무시 하고 상관 하지 않 습 니 다.새로 나 온 XR 과 XS Max 는 화면 픽 셀 이 다 르 지만(LCD 화면 하나 OLED 화면 하나)2x 하나 3x 가 최종 적 으로 얻 은 pt 크기 는 같 습 니 다.게다가 iOS 11 은 safearea Insets 를 도입 하기 시 작 했 습 니 다.만약 에 이 속성 을 사용 했다 면 프로젝트 의 페이지 를 조정 할 필요 가 거의 없습니다.그러면 마지막 으로 두 개의 사 이 즈 를 추가 하 는 시작 그림 만 남 았 습 니 다.
시작 그림 추가
시동 도 를 왜 추가 합 니까?
우리 가 XR 의 시 뮬 레이 터 를 직접 뛰 기 전의 오래된 프로젝트(아이 폰 X 에 적합)를 다음 과 같이 인쇄 하면 다음 과 같은 인쇄 를 할 수 있 습 니 다.

WTF?설마 Xcode 10 bug?XS Max 다시 해 봐.똑 같은 결 과 를 얻 을 수 있 을 거 라 고 믿 어.
여기 설명 좀 해 봐.아이 폰 X 가 처음 나 왔 을 때 어 울 리 지 않 는 항목 을 뛰 면 앱 이 화면 상하 에 각각 몇 십 픽 셀 의 블랙 스크린 을 켜 는 것 을 기억 하 십 니까?아이 폰 X 의 시작 페이지 가 없 기 때 문 입 니 다!마찬가지 로 우 리 는 먼저 시작 페이지 를 도입 해 야 한다.

사진 홈 페이지 주소
이것 은 시작 그림 크기 이 므 로 픽 셀 단위 로 그림 을 자 르 면 됩 니 다.
주의해 야 할 것 은 오래된 프로젝트 가 Xcode 10 으로 열 린 후에 Images.xcassets 폴 더 를 열 고 LaunchImage 폴 더 아래 에 있 을 때 상기 두 개의 새로운 기종 의 자리 잡 이 상 자 를 찾 을 수 없다 는 것 입 니 다.가장 쉬 운 방법 은 오른쪽 단 추 를 누 르 면 새로운 LaunchImage 를 추가 한 다음 에 오래된 LaunchImage 를 삭제 하고 새 폴 더 의 이름 을 LaunchImage 로 바 꾸 는 것 입 니 다.

새로 만 든 LaunchImage 에 두 개의 새 기종 이 자리 잡 는 상자 가 나타 납 니 다.

시작 페이지 를 추가 한 후에 인쇄 를 하면 정확 한 화면 크기 가 됩 니 다!

페이지 가 적합 하 다.
iOS 11 부터 safearea Insets 를 도입 한 것 은 오래된 화제 일 것 이 니 제 소감 을 조금 만 말씀 드 리 겠 습 니 다.
페이지 는 항상 중간 판단 을 써 야 합 니 다.코드 에 safearea Insets 나 앞머리 판단 등 도 구 를 사용 해 야 합 니 다.그래서 저 는 프로젝트 에 UIManager 의 단일 예 를 쓰 는 습관 이 있 습 니 다.이 안 에는 적당 한 속성 을 제공 하 는 동시에 tableView 의 적당 한 조합 등 도 쓸 수 있 습 니 다.

@interface DDUIManager : NSObject

@property (nonatomic, assign, readonly) UIEdgeInsets safeAreaInset;
/*
 *       
 * */
@property (nonatomic, assign, readonly) BOOL isHairHead;

+ (instancetype)sharedManager;

@end

@implementation DDUIManager

- (UIWindow *)keyWindow {
  return [UIApplication sharedApplication].keyWindow;
}

- (UIEdgeInsets)safeAreaInset {
  if (@available(iOS 11.0, *)) {
    if (self.keyWindow) {
      return self.keyWindow.safeAreaInsets;
    }
  }
  return UIEdgeInsetsZero;
}

- (BOOL)isHairHead {
  if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
    return self.safeAreaInset.left > 0.0f;
  }else {
    // ios12         20.0f
    return self.safeAreaInset.top > 20.0f;
  }
}

@end
이렇게 쓰 는 것 은 사용 이 편리 할 뿐만 아니 라 시스템 의 조건 컴 파일 등 도 피 할 수 있 습 니 다.safearea Inset 은 iOS 11 이기 때문에 나 온 것 입 니 다.또한 e lse 에서 UIEdgeInsets Zero 로 돌아 가 사용 할 때 if-else 문 구 를 절약 할 수 있 습 니 다.예 를 들 어:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기