autolayout 및 safearea

의 목적


아이폰X 대응을 조사하는 단계에서는 오토Layout에서 모호한 이해의 부분을 재인식하고 싶다.
그나저나 세이프아레를 미리 이해하지 않으면 전진할 수 없을 것 같아서 정리도 해봤어요.

뷰 표시의 대략적인 흐름

  • View 읽기
  • 제한 추가(AutoLayout)
  • 구속조건 기반 계산View의 프레임(레이아웃)
  • 프레임에서 그리기(렌더링)
  • 제 생각에는.


    viewDidLayoutSubviews 등을 통해 레이아웃을 업데이트한 후
    다시 그려야 하기 때문에 처리가 무거워질 수 있습니다.
    최종적으로 조정하고 싶다면viewDidApper인가요?
    autoolayout을 사용하면 constraint를 적극적으로 사용합니다.

    프로세스 설명 섹션의 그림



    bounds와 프레임의 차이에 대해서.


    지금까지 제대로 이해하지 못했기 때문에 제대로 이해하려고 했어요.

    frame


    x, y의 위치는 부모view에서 온 위치를 표시합니다
    사이즈가 바운스랑 똑같죠.

    bounds


    x, y는 자신의 위치를 표시하기 때문에 기본(0.0)

    화상도


    이런 느낌.

    safearea 정보


    아이폰X를 가져와서 나왔어요.
    아이폰X보다 크기가 큰 장치는 필수다.

    지역명


    뭔가 덧붙인 그림 같아.

    사파이어 사이즈를 얻기 위해서.


    이외의 기능도 갖추고 있으며,view시스템의 데이터를 총괄 관리하기 위해 아래의 파일을 제작한다
    ```
    //
    // ViewManager.swift
    // shotworks_customer
    //
    //Created by 히라쓰카 준보온 2018/11/12.
    // Copyright © 2018 ‚àö√á≈ì√Ñ‚Äö√¢‚Ä¢‚àö√ᬨ‚àû‚àö‚àÇ ‚Äö√Ñ‚àû‚àö‚àè‚àö¬ß‚àö√£¬¨‚à´‚àö√Ü. All rights reserved.
    //
    import Foundation
    //view 시스템의 값 관리
    struct ViewManager {
    static let rootViewController = UIApplication.shared.keyWindow?.rootViewController
    
    static let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
    
    static var currentWindow: UIWindow? {
        if let window = UIApplication.shared.keyWindow {
            return window
        } else {
            return UIApplication.shared.windows[safe:0]
        }
    }
    
    // デフォルトFloat(44)としてUnwrap
    static func navigationBarHeight(callFrom: UIViewController) -> CGFloat {
        return callFrom.navigationController?.navigationBar.frame.size.height ?? 44
    }
    
    // デフォルトFloat(44)としてUnwrap
    static func tabBarHeight(callFrom: UIViewController) -> CGFloat {
        return callFrom.tabBarController?.tabBar.frame.size.height ?? 52
    }
    
    
    /// topのsafeArea
    static var topSafeArea: CGFloat{
    
        if #available(iOS 11.0, *) {
            return ViewManager.currentWindow?.safeAreaInsets.top ?? 0
        }else{
            return 0
        }
    }
    
    /// bottomのsafeArea
    static var bottomSafeArea: CGFloat{
    
        if #available(iOS 11.0, *) {
            return ViewManager.currentWindow?.safeAreaInsets.bottom ?? 0
        }else{
            return 0
        }
    }
    
    }
    
    # 参照
    https://qiita.com/shtnkgm/items/f133f73baaa71172efb2
    
    

    좋은 웹페이지 즐겨찾기