티스토리 뷰

반응형

UISheetPresentationController.Detent

 

 

안녕하세요 Gons 입니다.

반만 나오는 하프 모달 바텀 시트입니다.

드래그해서 크기를 변경할 수도 있습니다.

 

 

iOS 15 부터 지원합니다.

 

 

전체 코드

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let btn = UIButton(type: .system)
        view.addSubview(btn)
        btn.frame = .init(x: 100, y: 100, width: 100, height: 100)
        btn.setTitle("presentModal", for: .normal)
        btn.addTarget(self, action: #selector(presentModalBtnTap), for: .touchUpInside)
    }
    
    @objc private func presentModalBtnTap() {
        
        let vc = UIViewController()
        vc.view.backgroundColor = .systemYellow
        
        vc.modalPresentationStyle = .pageSheet
        
        if let sheet = vc.sheetPresentationController {
            
            //지원할 크기 지정
            sheet.detents = [.medium(), .large()]
            //크기 변하는거 감지
            sheet.delegate = self
           
            //시트 상단에 그래버 표시 (기본 값은 false)
            sheet.prefersGrabberVisible = true
            
            //처음 크기 지정 (기본 값은 가장 작은 크기)
            //sheet.selectedDetentIdentifier = .large
            
            //뒤 배경 흐리게 제거 (기본 값은 모든 크기에서 배경 흐리게 됨)
            //sheet.largestUndimmedDetentIdentifier = .medium
        }
        
        present(vc, animated: true, completion: nil)
    }
    
}

extension ViewController: UISheetPresentationControllerDelegate {
    func sheetPresentationControllerDidChangeSelectedDetentIdentifier(_ sheetPresentationController: UISheetPresentationController) {
        //크기 변경 됐을 경우
        print(sheetPresentationController.selectedDetentIdentifier == .large ? "large" : "medium")
    }
}

iOS

Swift

Xcode

UIKit

SwiftUI

modalPresentationStyle

sheetPresentationController

detents

커스텀 프레젠트

반응형
댓글
300x250
반응형
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday