화면 이동 후 화면 회전 시 원본 화면의 레이아웃 조정
안녕히 계십시오.
화면이 종횡으로 회전할 때, Notification을 사용하면 회전할 때 몇 가지 일을 처리할 수 있다.
Notification
// NotificationCenterに画面回転を追加
private func registerNotification() {
NotificationCenter.default.addObserver(self,
selector:#selector(didChangeOrientation(_:)),
name: .UIDeviceOrientationDidChange,
object: nil)
}
@objc private func didChangeOrientation(_ notification: Notification) {
//画面回転のイベント
}
사용 예
예를 들어, UICollectionView를 가로세로와 무관하게 10*4에 40개의 레이아웃을 표시하는 경우
// UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width/10, height: collectionView.frame.height/4)
}
// Notification
@objc private func didChangeOrientation(_ notification: Notification) {
//画面回転のイベント
collectionView.reloadData()
}
이런 느낌이야.🐸
화면 이동 상황
이번 화면 이동 후 화면을 돌리면 아까 사용한 예와 같은 배치가 이상해진다.
괜찮은 타입.
먼저, 방금 사용한 사례의 상태에서 화면이 이동한 후에 이동 후 화면에서 화면의 회전을 하고 화면을 닫는다.
변환 소스(수직) - 변환 후(수평)
변환 소스(수평) - 변환 후(수직)
의 두 모드 모두 CollectionView를 다시 불러와 크기를 조절합니다.
안 되는 패턴.
다음에는 아래처럼 테두리를 달아보세요.
대원 UIView에서 구성된 UICollectionView를 검은색 테두리 색상의 UIView가 있는 SubView로 구성하여 위아래 좌우로 10pt를 제한합니다.
UICollectionView의 셀 크기는 변환 전 화면의 방향에 따라 업데이트되지 않습니다.
시도해 본 일
1.layoutIfNeeded
우선 화면이 숨겨졌을 때 노티파이션 처리도 수행되기 때문에 화면이 숨겨졌을 때 대원의 뷰 프레임은 크기에 변화가 없었기 때문에 단원의 사이즈에 변화가 없었는지 의심스럽다.@objc private func didChangeOrientation(_ notification: Notification) {
print("frame:\(view.frame)")
collectionView.reloadData()
}
그래서 나는 화면이 바뀐 후 View의 크기가 바뀔 때부터 변하지 않았다는 것을 알아차렸다.
즉, 레이아웃 IfNeedd를 통해 정확한 View 사이즈로 업데이트할 수 있다는 것이 더 좋지 않습니까?그렇게 생각했어.@objc private func didChangeOrientation(_ notification: Notification) {
view.layoutIfNeeded()
collectionView.reloadData()
}
2.viewDidAppear/viewDidLayoutSubviews
"UIView oricon frame not change"를 찾아보니 view Did Apper와view Did Layout Subviews가 프레임을 업데이트한다고 해서 거기에 업데이트된 내용을 썼어요."아니, 이번 패턴이면 한순간에 안 되는 사람 지면이 디자인이 안 되나? 그래도 한번 해볼까?"
아니오, 알고 있습니다.
3. View 수동 업데이트
대원의 UIView 치수는 수동으로 UIScreen 치수로 업데이트됩니다.override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
view.frame.size = UIScreen.main.bounds.size
view.layoutIfNeeded()
}
끝맺다
추기
Reference
이 문제에 관하여(화면 이동 후 화면 회전 시 원본 화면의 레이아웃 조정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fr0g_fr0g/items/3cee3c3d24a56cd91992
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// NotificationCenterに画面回転を追加
private func registerNotification() {
NotificationCenter.default.addObserver(self,
selector:#selector(didChangeOrientation(_:)),
name: .UIDeviceOrientationDidChange,
object: nil)
}
@objc private func didChangeOrientation(_ notification: Notification) {
//画面回転のイベント
}
// UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width/10, height: collectionView.frame.height/4)
}
// Notification
@objc private func didChangeOrientation(_ notification: Notification) {
//画面回転のイベント
collectionView.reloadData()
}
이번 화면 이동 후 화면을 돌리면 아까 사용한 예와 같은 배치가 이상해진다.
괜찮은 타입.
먼저, 방금 사용한 사례의 상태에서 화면이 이동한 후에 이동 후 화면에서 화면의 회전을 하고 화면을 닫는다.
변환 소스(수직) - 변환 후(수평)
변환 소스(수평) - 변환 후(수직)
의 두 모드 모두 CollectionView를 다시 불러와 크기를 조절합니다.
안 되는 패턴.
다음에는 아래처럼 테두리를 달아보세요.
대원 UIView에서 구성된 UICollectionView를 검은색 테두리 색상의 UIView가 있는 SubView로 구성하여 위아래 좌우로 10pt를 제한합니다.
UICollectionView의 셀 크기는 변환 전 화면의 방향에 따라 업데이트되지 않습니다.
시도해 본 일
1.layoutIfNeeded
우선 화면이 숨겨졌을 때 노티파이션 처리도 수행되기 때문에 화면이 숨겨졌을 때 대원의 뷰 프레임은 크기에 변화가 없었기 때문에 단원의 사이즈에 변화가 없었는지 의심스럽다.@objc private func didChangeOrientation(_ notification: Notification) {
print("frame:\(view.frame)")
collectionView.reloadData()
}
그래서 나는 화면이 바뀐 후 View의 크기가 바뀔 때부터 변하지 않았다는 것을 알아차렸다.
즉, 레이아웃 IfNeedd를 통해 정확한 View 사이즈로 업데이트할 수 있다는 것이 더 좋지 않습니까?그렇게 생각했어.@objc private func didChangeOrientation(_ notification: Notification) {
view.layoutIfNeeded()
collectionView.reloadData()
}
2.viewDidAppear/viewDidLayoutSubviews
"UIView oricon frame not change"를 찾아보니 view Did Apper와view Did Layout Subviews가 프레임을 업데이트한다고 해서 거기에 업데이트된 내용을 썼어요."아니, 이번 패턴이면 한순간에 안 되는 사람 지면이 디자인이 안 되나? 그래도 한번 해볼까?"
아니오, 알고 있습니다.
3. View 수동 업데이트
대원의 UIView 치수는 수동으로 UIScreen 치수로 업데이트됩니다.override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
view.frame.size = UIScreen.main.bounds.size
view.layoutIfNeeded()
}
끝맺다
추기
Reference
이 문제에 관하여(화면 이동 후 화면 회전 시 원본 화면의 레이아웃 조정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fr0g_fr0g/items/3cee3c3d24a56cd91992
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@objc private func didChangeOrientation(_ notification: Notification) {
print("frame:\(view.frame)")
collectionView.reloadData()
}
@objc private func didChangeOrientation(_ notification: Notification) {
view.layoutIfNeeded()
collectionView.reloadData()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
view.frame.size = UIScreen.main.bounds.size
view.layoutIfNeeded()
}
Reference
이 문제에 관하여(화면 이동 후 화면 회전 시 원본 화면의 레이아웃 조정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fr0g_fr0g/items/3cee3c3d24a56cd91992텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)