Tocropviewcontroller: safeAreaInsets๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2019๋…„ 09์›” 25์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TimOliver/TOCropViewController

๋ฉ‹์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๐Ÿ‘

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ๋‹ฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ?
์งˆ๋ฌธ์ด ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ ๋ชจ์Œ์˜ ์œ„์น˜๊ฐ€ ํ•˜๋‹จ์— ๋„ˆ๋ฌด ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

safeAreaInsets.bottom์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ•˜์‹ญ๋‹ˆ๊นŒ? TestSafeArea.zip

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @zhangao0086์ž…๋‹ˆ๋‹ค! ์ง€์—ฐ ๋ผ์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๋งˆ์นจ๋‚ด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•  ์ž์œ  ์‹œ๊ฐ„์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์—์„œ๋„ ๋…ธ์น˜๋ฅผ ์ œ์™ธํ•˜๊ณ  safeAreaInsets ๊ฐ€ 0์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๊ณ ์นœ ๊ฒƒ ๊ฐ™์•„์š”. ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด iOS 13 ๋ชจ๋‹ฌ ๋””์Šคํ”Œ๋ ˆ์ด์˜ ๋˜ ๋‹ค๋ฅธ ๋ถ€์ž‘์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. modalPresentationStyle ๋ฅผ .fullScreen ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‚ฝ์ž…์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

์•„์ง ์ƒˆ ํฌ๋“œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถœ์‹œํ•˜์ง€ ์•Š์•˜์ง€๋งŒ(Catalina๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์„ ๋•Œ ๋‚ด CI ์„œ๋ฒ„๊ฐ€ ๋„˜์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜…) ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— .fullScreen ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ์—์„œ ๊ฐ€์ ธ์™€์„œ ์ง€๊ธˆ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

CocoaPods๋ฅผ ํ†ตํ•ด ๋งˆ์Šคํ„ฐ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

๊ฐ์‚ฌ ํ•ด์š”!

๋ชจ๋“  14 ๋Œ“๊ธ€

@zhangao0086 iOS13์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์•ฑ ์ทจ์†Œ๋ฅผ ํƒญํ•ด๋„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•‘...

์•ˆ๋…•ํ•˜์„ธ์š”!
๊ทธ ์ด์œ ๋Š” CropViewController์˜ ์‚ฌ์šฉ์ž ์ง€์ • VC ์ „ํ™˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ „ํ™˜๊ณผ ๊ด€๋ จ๋œ iOS13์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. :)
ํŒŒ์ผ: CropViewController.swift, ๋ฌธ์ž์—ด: 561.

fileprivate func setUpCropController() {
        addChild(toCropViewController)
        transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)
        toCropViewController.delegate = self
        toCropViewController.didMove(toParent: self)
    }

๊ธฐ๋ณธ ์ „ํ™˜์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด ์ค„์„ ์ฃผ์„ ์ฒ˜๋ฆฌ/์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)

์ €๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์ปค์Šคํ…€ ์ „ํ™˜๋งŒ์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒ์˜ค๋ฒ„์˜ UIImagePickerController์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ‘ธ์‹œํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. iOS 13์˜ ํŒ์˜ค๋ฒ„๋Š” ๋ทฐ์— ํ™”์‚ดํ‘œ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ์ด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด์ œ ํ™”์‚ดํ‘œ๊ฐ€ ์‹ค์ œ๋ณด๋‹ค ๋” ํฌ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ™”์‚ดํ‘œ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ™”์‚ดํ‘œ๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฉด ์ด ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์˜ค๋ฅธ์ชฝ์˜ ํ™”๋ฉด์—์„œ ๋ˆ„์ถœ๋˜๋Š” ๋“ฑ์ž…๋‹ˆ๋‹ค. ์•ˆ์ „ ์˜์—ญ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ณ ์น ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฒฌํ•ด๊ฐ€ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” safeAreaLayoutGuide๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋”˜๊ฐ€์—์„œ ์–ด๋–ป๊ฒŒ๋“  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ ์–ด๋””์—๋„ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๋Š” ๋ช‡ ๊ตฐ๋ฐ ๋” ์žˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/57988889/ios-13-uipopoverpresentationcontroller-sourceview-content-visible-in-the-arrow

https://stackoverflow.com/questions/57866771/ios-problem-of-display-the-popover-border-in-the-ios13

๋˜ํ•œ ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ์ด๊ฒƒ์ด ์ˆ˜์ •๋˜์—ˆ๋‹ค๋ฉด ์นด๋ฅดํƒ€๊ณ ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? @ํŒ€์˜ฌ๋ฆฌ๋ฒ„

์•ˆ๋…•ํ•˜์„ธ์š” @zhangao0086์ž…๋‹ˆ๋‹ค. ํฌ๊ด„์ ์ธ ์ƒ˜ํ”Œ ์•ฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ €๋Š” ์ง€๊ธˆ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ iOS 13 ํ™”์žฌ๋ฅผ ์ง„์••ํ•˜๋Š๋ผ ๋ฐ”๋น ์„œ ์•„์ง ์ด๊ฒƒ์„ ๋ณผ ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!

๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๊ทธ๊ฒƒ์„ ์กฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋™์•ˆ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์•„ PR์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋‹น์‹œ์—๋Š” TOCropViewController ์˜ ๋ชจ๋“  Objective-C ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Swift๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ž˜ CropViewController ๋ฅผ ๋ณ„๋„์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ๋Š” ๋ž˜ํผ๋ฅผ ์ž ์žฌ์ ์œผ๋กœ ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@TimOliver ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์™„์ „ ์ดํ•ดํ•ด์š”๐Ÿ˜ƒ

์•ˆ๋…•ํ•˜์„ธ์š” @zhangao0086์ž…๋‹ˆ๋‹ค! ์ง€์—ฐ ๋ผ์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๋งˆ์นจ๋‚ด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•  ์ž์œ  ์‹œ๊ฐ„์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์—์„œ๋„ ๋…ธ์น˜๋ฅผ ์ œ์™ธํ•˜๊ณ  safeAreaInsets ๊ฐ€ 0์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๊ณ ์นœ ๊ฒƒ ๊ฐ™์•„์š”. ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด iOS 13 ๋ชจ๋‹ฌ ๋””์Šคํ”Œ๋ ˆ์ด์˜ ๋˜ ๋‹ค๋ฅธ ๋ถ€์ž‘์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. modalPresentationStyle ๋ฅผ .fullScreen ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‚ฝ์ž…์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

์•„์ง ์ƒˆ ํฌ๋“œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถœ์‹œํ•˜์ง€ ์•Š์•˜์ง€๋งŒ(Catalina๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์„ ๋•Œ ๋‚ด CI ์„œ๋ฒ„๊ฐ€ ๋„˜์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜…) ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— .fullScreen ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ์—์„œ ๊ฐ€์ ธ์™€์„œ ์ง€๊ธˆ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

CocoaPods๋ฅผ ํ†ตํ•ด ๋งˆ์Šคํ„ฐ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

๊ฐ์‚ฌ ํ•ด์š”!

@TimOliver ํ›Œ๋ฅญํ•œ ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

ํ›Œ๋ฅญํ•œ! ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ‘

๋˜ํ•œ ๋‚ด ์ฝ”๋“œ์—์„œ cropViewController.modalPresentationStyle = .fullScreen ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค(๋‹จ์ˆœํžˆ ๋งˆ์Šคํ„ฐ ๋ถ„๊ธฐ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜). ๋‚˜์—๊ฒŒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฅผ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ˆ˜์ •์€ Swift ์ฝ”๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๊ฒƒ์ด ๊ฐ๊ด€์ ์ธ C์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰