Xamarin.Forms MasterDetailPage - 删除/隐藏Master上的状态栏

时间:2017-02-01 19:39:00

标签: xamarin xamarin.ios xamarin.android xamarin.forms

我试过找到并回答这个问题,但我没有运气。

我想重新创建Slack应用程序的功能,因为当用户从Detail中打开Master页面时,我想显示/隐藏状态栏(时间,电池,网络等)。因此,在查看详细信息页面时,您应该看到状态栏...当您向前滑动以显示主页面时,我希望它会逐渐消失。

我尝试为Master(ContentPage)创建自定义渲染器添加:

{{1}}

到ViewDidLoad方法,但它不起作用。我也尝试在ViewWillAppear方法中添加它,但它也没有用。

我希望在iOS和Android上都能实现这一点,但我目前只专注于iOS应用。

任何帮助将不胜感激!

免责声明:我对xamarin很新,所以如果这是常识,请保持温和。

2 个答案:

答案 0 :(得分:2)

嗯,我知道它适合iOS!

1:在iOS包中的Info.plist文件中添加一行:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

2:为MasterDetailPage创建自定义渲染器...

using YourProject;
using YourProject.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using UIKit;

[assembly:ExportRenderer(typeof(YourMasterDetailPageToCustomize), typeof(MasterDetailCustomRenderer))]

namespace YourProject.iOS {
    public class MasterDetailCustomRenderer:PhoneMasterDetailRenderer {
        public MasterDetailCustomRenderer() {}
        public override void ViewWillLayoutSubviews() {
            var item = Element as MasterDetailPage;
            if (item != null) {
                if (item.IsPresented) {
                    UIApplication.SharedApplication.SetStatusBarHidden(true, UIStatusBarAnimation.Fade);
                } else {
                    UIApplication.SharedApplication.SetStatusBarHidden(false, UIStatusBarAnimation.Fade);
                }
            }
            base.ViewWillLayoutSubviews();
        }
    }
}

真的是这样。除非您将该行添加到Info.plist中,否则它将无法工作。当您打开“主页”页面时,预期的行为是淡出状态栏,并在显示“详细信息”页面时淡出状态栏。

答案 1 :(得分:2)

我没有发表评论的声誉,但我想在ksumarine的答案中添加代码修改。

您现在需要使用public override void ViewDidLayoutSubviews()才能使代码正常运行。按预期的方式工作!