我有这个问题,其中我需要得到导航栏高度依赖我的服务。
目前,我坚持什么在这里跟随。我什么都试过我找到计算器和谷歌,但没有人对我的作品。
继承人我的代码:
[assembly: Dependency(typeof(DeviceInfo))]
namespace Wicket.App.Mobile.iOS.Framework
{
public class DeviceInfo : IDeviceInfo
{
public float StatusBarHeight => (float)UIApplication.SharedApplication.StatusBarFrame.Size.Height;
public float NavigationBarHeight => GetNavigationBarHeight();
public static UINavigationController NavigationController { get; set; }
public float GetNavigationBarHeight()
{
//Get navigation bar height
return 0;
}
}
}
我已经完成了Android的一部分,它的作品好。现在唯一的问题是在iOS中。我试图让navigationcontroller的实例中的AppDelegate,这样我就可以得到杆架这样NavigationBar.Bounds.Height;
我想,这应该工作:
var navheight = GetTopViewController().NavigationController.NavigationBar.Frame.Height;
public static UIViewController GetTopViewController()
{
var window = UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
vc = vc.PresentedViewController;
if (vc is UINavigationController navController)
vc = navController.ViewControllers.Last();
return vc;
}
解:
如何在IDeviceInfo
里面的函数传递的viewController的实例作为参数?
尝试这个:
public void getNaviHeight(ContentPage vc)
{
var renderer = Platform.GetRenderer(vc);
if (renderer == null)
{
renderer = RendererFactory.GetRenderer(vc);
Platform.SetRenderer(vc, renderer);
}
var viewController = renderer.ViewController;
var h = viewController.NavigationController?.NavigationBar.Frame.Height;
}
并使用依赖性:
public MainPage ()
{
DependencyService.Get<IDeviceInfo>().getNaviHeight(this);
}
这个工作对我说:
var navigationBar = UIApplication.SharedApplication.KeyWindow.RootViewController.View.Subviews[0].Subviews.OfType<UINavigationBar>().FirstOrDefault();
if(navigationBar != null)
{
// continue here...
}