一,当App开启自动旋转时,controller中监测旋转时执行的方法:
///旋转处理
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate { context in
print(Thread.current.description,context);
if Thread.current.isMainThread {
self.recordTableview.reloadData();
} else {
DispatchQueue.main.async {
self.recordTableview.reloadData();
}
}
} completion: { context in
print(Thread.current.description);
}
print("viewWillTransition");
super.viewWillTransition(to: size, with: coordinator);
}
///可通过size.width和size.height判断竖直还是横屏。
之前的方法已经被viewWillTransition方法所代替,所以以下是原来的老方法。
以前的API:
// Notifies when rotation begins, reaches halfway point and ends.
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration API_DEPRECATED("Implement viewWillTransitionToSize:withTransitionCoordinator: instead", ios(2.0, 8.0)) API_UNAVAILABLE(tvos);
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration API_DEPRECATED("Implement viewWillTransitionToSize:withTransitionCoordinator: instead", ios(3.0, 8.0)) API_UNAVAILABLE(tvos);
子View中如果旋转屏幕了,修改其布局:
override func layoutSubviews() {
super.layoutSubviews();
if true == viewOrientation() {
self.textElem.snp.remakeConstraints { make in
make.left.equalTo(10.0);
make.right.equalTo(-10.0);
make.centerY.equalToSuperview();
make.height.equalTo(34.0);
};
}else{
self.textElem.snp.remakeConstraints { make in
make.left.equalTo(10.0);
make.right.equalTo(-10.0);
make.centerY.equalToSuperview();
make.height.equalTo(12.0);
};
}
}
判断当前是否横竖屏的一种方法,当然还有很多方法可以判断,这是通过屏幕去判断,而不是设备的home键去判断:
///屏幕方向,是否是竖直
func viewOrientation() -> Bool {
if #available(iOS 13.0, *) {
let interfaceOrientation = UIApplication.shared.windows.first?.windowScene?.interfaceOrientation;
return interfaceOrientation == .portrait ? true : false;
} else {
// Fallback on earlier versions
return UIApplication.shared.statusBarOrientation == .portrait ? true : false;
};
}

