*UIScrollView는 고유한 콘텐츠 크기(intrinsic content size)가 없다 ⇒ 내부 컨텐츠들로 사이즈가 결정됨
*UIScrollView에 오토레이아웃을 거는건 크기가 아니라 프레임을 결정한다
private let containerView: UISCrollView = {
let sv = UIScrollView()
...
return sv
}()
private let imageView: UIImageView = {
let iv = UIImageView()
...
return iv
}()
containerView.addSubView(imageView)
NSLayoutConstraint.activate([
...
])
❌ imageView 오토레이아웃이 제대로 설정되지 않는다.
private let scrollView: UISCrollView = {
let sv = UIScrollView()
...
return sv
}()
private let containerView: UIView = {
let v = UIView()
...
return v
}()
private let imageView: UIImageView = {
let iv = UIImageView()
...
return iv
}()
scrollView.addSubView(containerView)
NSLayoutConstraint.activate([
...
])
containerView.addSubView(imageView)
NSLayoutConstraint.activate([
...
])
🟢 ScrollView 안에 컨테이너뷰인 UIView를 넣어줌으로써 오토레이아웃이 잘 잡힌다
NotificationCenter.default.**post**(name: Notification.Name("locationAuthorizationChanged"),
object: locationManager.authorizationStatus)
// 사용자 위치 권한 상태가 바뀔 때의 NotificationCenter
NotificationCenter.default.**addObserver**(self,
selector: (handleLocationAuthorizationChange(_:)),
name: Notification.Name("locationAuthorizationChanged"),
object: nil)
@objc func handleLocationAuhtorizationChange(_ notification: Notification) {
if let status = notification.object as? CLAuthorizationStatus {
status : 사용자 위치 권한 상태가 바뀔 때마다 실행될 로직
}
}
// 사용자 위치 권한 상태
let status = LocationManager.shared.locationManager.authorizationStatus
switch status {
case .denied, .restricted:
설정앱 이동 버튼 페이지
case .authorizedAlways, .authorizedWhenInUse:
뷰 구성
}