iOS 15์์๋ Sheet์ ์ฌ๋ฌ ์ปค์คํ ์ต์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ex. ํ๋ฉด์ ์ ๋ฐ ํฌ๊ธฐ๋ก ์ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ex. Dimmed View๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- ex. ์ํธ ์๊ณผ ์ํธ ๋ค์์ ๋์์ ์ฝํ ์ธ ์ ์ํธ ์์ฉํ ์ ์๋๋ก ์ฑ์์ ๋น๋ชจ๋ฌ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
1. Getting a sheet
Sheet ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค. UIPresentationController์ ์๋ธ ํด๋์ค์ธ UISheetPresentationController๋ฅผ ์ด์ฉํฉ๋๋ค. ์ํธ๋ก ๋์ฐ๊ณ ์ถ์ ์ธ์คํด์ค์ sheetPresentationController๋ฅผ ํธ์ถํฉ๋๋ค.
let viewControllerToPresent = UIViewController()
if let sheet = viewControllerToPresent.sheetPresentationController {
// customize
}
present(viewController, animated: true)
2. detents
- ์ํธ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋์ด๋ ๋์ด
- ์์ ํ ํ์ฅ๋ ์ํธ ํ๋ ์์ ์ผ๋ถ
2๊ฐ์ง์ detents๊ฐ ์กด์ฌํฉ๋๋ค.
- ์ ์ฒด ๋์ด์ ์ฝ ์ ๋ฐ์ธ ์ค๊ฐ detent
- ์์ ํ ํ์ฅ๋ ์ํธ์ ๋์ด์ธ ํฐ detent
Array๋ก ๊ฐ๋จํ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
sheet.detents = [.large()]
sheet.detents = [.medium(), .large()] // resizable ๊ฐ๋ฅํ ์ํ๊ฐ ๋ฉ๋๋ค.
sheet.detents = [.medium()] // full height์ผ๋ก resizable ๋์ง ์์ต๋๋ค.
What’s new in UIKit์ ์ฐธ๊ณ ํ์.
iOS 16๋ถํฐ๋ ๋์ด๋ฅผ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์์ต๋๋ค.
if let sheet = viewController.sheetPresentationController {
sheet.detents = [
.custom { _ in
return 200
}
]
}
if let sheet = viewController.sheetPresentationController {
sheet.detents = [
.custom { _ in
return 200
},
.custom { context in
return context.maximumDetentValue * 0.6
}
]
}
3. PickerViewController์ ์ ์ฉํ๊ธฐ
Present image picker in a standard sheet
func showImagePicker() {
let picker = PHPickerViewController()
picker.delegate = self
if let sheet = picker.sheetPresentationController {
sheet.detents = [.medium(), .large()]
}
present(picker, animated: true)
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
dismiss(animated: true)
}
4. prefersScrollingExpandWhenScrolledToEdge
- ์คํฌ๋กค์ด ์ค์ฒฉ๋์ด ์๋ ์ํ์์ ๋์์ ์ํ๋๋๋ก ํด์ฃผ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
- default๋ True์ ๋๋ค.
๋ด๋ถ ์ปจํ
์ธ ๋ฅผ ์คํฌ๋กคํ๋ฉด ๊ฐ์ด ๋ฐ๋ผ์ฌ๋ผ๊ฐ๋ ๋ฌธ์
5-1. Dimmed View ์ ๊ฑฐ
largestUndimmedDetentIdentifier
์ํธ ์๊ณผ ์ํธ ๋ค์์ ๋์์ ์ฝํ ์ธ ์ ์ํธ ์์ฉํ ์ ์๋๋ก ์ฑ์์ ๋น๋ชจ๋ฌ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
sheet.largestUndimmedDetentIdentifier = .medium // Defualt: nil
- ์ง์ ํ detent๋ณด๋ค ํฐ detent์๋ง dimmed view๋ฅผ ์ ์ฉํฉ๋๋ค.
5-2. delegate์ ์ฎ๊ธฐ
dimmed view๋ฅผ ์ ๊ฑฐํ๊ณ , delegate๋ฅผ ์ด์ฉํ๋ฉด ์ปค์คํฐ๋ง์ด์ฆํ ์ํธ ์์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
6. ๊ฐ๋ก๋ชจ๋ ์
sheet.prefersEdgeAttachedInCompactHeight = true
7. Grabber
sheet.prefersGrabberVisible = true
8. CornerRadius
sheet.preferredCornerRadius = 20
9. Adaptation from popover
iPad์์ ์ํธ ๋์ ํ์ค๋ฒ๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ modal์ presentation style์ popover๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ sheetPresentationController ๋์ popoverPresentationController์ ํธ์ถํฉ๋๋ค.
GitHub ์๋ณธ ์ถ์ฒ
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] DateFormat, ์ด๊ฑฐํ์ผ๋ก ์ข ๋ ์ฝ๊ฒ ๋ค๋ฃจ๊ธฐ (8) | 2022.08.09 |
---|---|
ํ์ ์ถ๋ก ๊ณผ ํ์ ์ด๋ ธํ ์ด์ ์ ์๋ ์ฐจ์ด์ ๊ดํ์ฌ(๐ง ํ์ ์ถ๋ก ์ด ๋ ๋น ๋ฅด๋ค?) (2) | 2022.08.02 |
Enum์ ํ์ฉํด TableViewController ๊ตฌ์ฑํ๊ธฐ (1) | 2022.07.19 |
forEach์ for-in์ ๋ํ ๊ณ ์ฐฐ (0) | 2022.07.19 |
์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ Contributor ๋์ด๋ณด๊ธฐ(with FSCalendar) (10) | 2022.07.14 |