我试过找到并回答这个问题,但我没有运气。
我想重新创建Slack应用程序的功能,因为当用户从Detail中打开Master页面时,我想显示/隐藏状态栏(时间,电池,网络等)。因此,在查看详细信息页面时,您应该看到状态栏...当您向前滑动以显示主页面时,我希望它会逐渐消失。
我尝试为Master(ContentPage)创建自定义渲染器添加:
{{1}}
到ViewDidLoad方法,但它不起作用。我也尝试在ViewWillAppear方法中添加它,但它也没有用。
我希望在iOS和Android上都能实现这一点,但我目前只专注于iOS应用。
任何帮助将不胜感激!
免责声明:我对xamarin很新,所以如果这是常识,请保持温和。
答案 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()
才能使代码正常运行。按预期的方式工作!