我有一个包含以下内容的视图:
MKMapView
,以在地图上显示一些物品 UITableView
中的UIView
,以在列表中显示项目 用户必须能够通过移动分隔符来显示地图或列表。
这很好用,但是在用户旋转屏幕后出现问题:在这种情况下,列表不再正确显示。
列表的位置 UIView
是通过指定其最高边距约束来设置的:我第一次知道状态栏高度(使用UIApplication.SharedApplication.StatusBarFrame.Height
)。
但是轮换之后,我需要重新计算此约束。为此,我尝试重新计算ViewWillTransitionToSize()
中的约束。
我的问题是,在调用ViewWillTransitionToSize()
时得不到期望值:设置了StatusBarFrame.Height
的“旧”值。
我还尝试获取状态栏状态
UIApplication.SharedApplication.StatusBarHidden
使用,但问题是相同的。
还有另一种方法可以让我在旋转过程中获得正确的状态栏高度吗?
答案 0 :(得分:0)
我在错误的位置测试了状态栏的状态:
public override void ViewWillTransitionToSize(CoreGraphics.CGSize toSize, IUIViewControllerTransitionCoordinator coordinator)
{
coordinator.AnimateAlongsideTransition((IUIViewControllerTransitionCoordinatorContext obj) => {
// Define any animations you want to perform (equivilent to willRotateToInterfaceOrientation)
// StatusBar status and height is not yet updated
}, (IUIViewControllerTransitionCoordinatorContext obj) => {
// Completition executed after transistion finishes (equivilent to didRotateFromInterfaceOrientation)
// StatusBar status and height is well updated
});
base.ViewWillTransitionToSize(toSize, coordinator);
}
如果测试不正确,则可以正常工作。