我有这个问题,我需要在我的依赖服务中获取导航栏的高度。
目前,我被困在这里要遵循什么。我尝试了我在stackoverflow和google中找到的所有东西,但没有人为我工作。
下面是我的代码:
[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。我已经尝试过在AppDelegate中获取navigationcontroller的实例,这样就可以像下面这样的NavigationBar.Bounds.Height;获得条形图了
发布于 2018-11-16 23:28:16
我认为这应该行得通:
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;
}发布于 2018-11-20 14:19:10
解决方案:
如何在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);
}发布于 2019-02-05 21:15:22
这对我很有效:
var navigationBar = UIApplication.SharedApplication.KeyWindow.RootViewController.View.Subviews[0].Subviews.OfType<UINavigationBar>().FirstOrDefault();
if(navigationBar != null)
{
// continue here...
}https://stackoverflow.com/questions/53340354
复制相似问题