【问题标题】:Not able to set status bar background in Xamarin.iOS无法在 Xamarin.iOS 中设置状态栏背景
【发布时间】:2019-07-18 13:37:43
【问题描述】:

我需要在 Xamarin.iOS(不是表单)中更改状态栏 UI,其中背景为黑色,文本颜色为白色。 为此,我想自定义状态栏视图,在互联网上搜索了所有我能找到的代码,发现下面的代码适用于大多数人。

var statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;
//tried with key statusBarWindow.statusBar as well.
statusBar.BackgroundColor = ...;

以上代码在 Xamarin.iOS 中崩溃(在 iPhone Xs 模拟器上测试)。 这是崩溃的日志。

在(包装器托管到本机)ObjCRuntime.Messaging.xamarin_IntPtr_objc_msgSend_IntPtr(intptr,intptr,intptr) 在 Foundation.NSObject.ValueForKey (Foundation.NSString 键) [0x0001c] 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.12/src/Xamarin.iOS/Foundation/NSObject.g.cs:599

任何人都可以帮助我解释为什么此代码在 Xamarin 中崩溃。 我尝试在这个 GitHub 线程 https://github.com/mono/Embeddinator-4000/issues/597

上找到原因

但在这里我也无法得到任何线索。 此外,如果有任何其他方式来自定义状态栏,我想放弃这个想法并继续提出建议。

【问题讨论】:

    标签: xamarin.ios mono


    【解决方案1】:

    据我所知,这是可行的,但通常当我使用它时,我总是使用RespondsToSelector检查选择器是否可用:

    UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;
    if (statusBar.RespondsToSelector(new ObjCRuntime.Selector("setBackgroundColor:")))
    {
        statusBar.BackgroundColor = UIColor.White;
    }
    

    另外,不要忘记将样式添加到 info.plist

    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleBlackOpaque</string>
    

    更新

    FinishedLaunching 方法中使用AppDelegate.cs 中的上述代码。

    【讨论】:

    • 我已经更新了有你代码的问题,没有用
    • 虽然这段代码放到AppDelegate.cs中没有crash,但是我需要为每个controller自定义状态栏视图,如何实现?
    • 您希望这在不同的控制器上有所不同吗?
    • 但这很奇怪,为什么要在不同的页面上将状态栏颜色更改为不同的颜色?
    • 实际上我们有登陆页面,状态栏应该是默认的,当我们点击登陆页面上的表格单元格时,我们转到详细页面上的详细页面,给我的UI就是这样,背景应该是黑色的,所有的文本和图标都应该是白色的。所以几乎我需要至少两种定制,一种用于主页,一种用于详细信息
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多