Xamarin.iOS:如何在ViewWillTransitionToSize

时间:2018-12-18 11:06:10

标签: ios xamarin.ios statusbar screen-rotation viewwilltransitiontosize

我有一个包含以下内容的视图:

  • 一个MKMapView,以在地图上显示一些物品
  • 嵌入UITableView中的UIView,以在列表中显示项目

用户必须能够通过移动分隔符来显示地图或列表。

这很好用,但是在用户旋转屏幕后出现问题:在这种情况下,列表不再正确显示。

列表的位置 UIView是通过指定其最高边距约束来设置的:我第一次知道状态栏高度(使用UIApplication.SharedApplication.StatusBarFrame.Height )。

但是轮换之后,我需要重新计算此约束。为此,我尝试重新计算ViewWillTransitionToSize()中的约束。

我的问题是,在调用ViewWillTransitionToSize()时得不到期望值:设置了StatusBarFrame.Height“旧”值

我还尝试获取状态栏状态  UIApplication.SharedApplication.StatusBarHidden使用,但问题是相同的。

还有另一种方法可以让我在旋转过程中获得正确的状态栏高度吗?

1 个答案:

答案 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);
}

如果测试不正确,则可以正常工作。