在定位更改後查詢UIScreen.main.bounds.height
時,我收到了一些奇怪的結果。也許這不是正確的做法。如何在方向更改後獲取屏幕高度?
我有一個偵聽NSNotification.Name.UIDeviceOrientationDidChange
事件觀察員:
NotificationCenter.default.addObserver(self, selector: #selector(self.orientationChange), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
這就要求,設置成爲制約新屏幕高度的75%的功能。這在iPhone上正常工作,但iPad返回錯誤的屏幕高度。
如果iPad在景觀方向UIScreen.main.bounds.height
將在肖像方向,反之亦然返回等於高度的值。
func orientationChange() {
// This will print the correct value on iPhone and iPad.
if UIDevice.current.orientation.isLandscape {
print("Landscape")
} else {
print("Portrait")
}
let screenSize = UIScreen.main.bounds
let screenHeight = screenSize.height
self.searchViewHeightConstraint.constant = screenHeight * 0.75
// Correct value on iPhone. Incorrect on iPad.
print("screenHeight: '\(screenHeight)'")
UIView.animate(withDuration: 0.6, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: .curveEaseOut, animations: {
self.searchView.superview?.layoutIfNeeded()
}, completion: nil)
}
我也遇到監測朝向的變化viewWilltransition
方法,但這種行爲在完全相反的方式,方法同上。即。高度是在iPad上正確的,但不正確iPhone上:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
let screenSize = UIScreen.main.bounds
let screenHeight = screenSize.height
self.searchViewHeightConstraint.constant = screenHeight * 0.75
// Correct value on iPad. Incorrect on iPhone.
print("screenHeight: '\(screenHeight)'")
}
什麼是iPhone和iPad之間的行爲不一致的原因,並使用NotificationCenter
正確的方法來監測方向變化?
您是否將'screenHeight'值變大或變小? – Srdjan
停止使用screensize = UIScreen.main.bounds並改爲使用大小,它會在方法中提供給您。你可以做size.height * 0.75 –
另外,如果你正在使用約束條件,並且你的searchView等於你的視圖的高度,那麼在同一個heighViewConstraint上,你可以將修飾符設置爲0.75,如果它總是會達到那個尺寸。然後,你將得到的旋轉視圖將更新自己,你根本不必做任何邏輯。 –