在同一视图控制器内以编程方式更改状态栏文本颜色

时间:2016-07-11 16:26:13

标签: ios xamarin

我在iOS 9上使用UIScrollView有两个页面,对于第一页我希望状态栏文本为黑色,第二页为白色。因此,当我滑动到第二页时,如果我滑动到第一页,我希望状态栏颜色变为白色和黑色。

我试过设置 在plist文件中UIViewControllerBasedStatusBarAppearance为false 然后以编程方式调用:

UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.BlackTranslucent;
SetNeedsStatusBarAppearanceUpdate();

但没有运气,状态栏文本显示为白色,即使在调用UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.BlackTranslucent时也会保持白色。

知道如何在同一个视图控制器中手动更改状态栏文本颜色吗?

3 个答案:

答案 0 :(得分:4)

转到您的应用程序Plist并将其添加为新行&将其设为NO。

查看基于控制器的状态栏外观否

添加bool以确定UIStatusBar颜色的状态&添加切换方法

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    if !frequency[indexPath.row].selected {

        // this avoid set initial value for the first time
        if let index = indexPathForCellSelected {
            // clear the previous cell
            frequency[index.row].selected = false
            tableView.cellForRowAtIndexPath(index)?.accessoryType = .None
            self.total -= frequency[index.row].amount
        }

        // mark the new one
        frequency[indexPath.row].selected = true
        tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .Checkmark

        indexPathForCellSelected = indexPath
        self.total += frequency[indexPath.row].amount
    }
}

答案 1 :(得分:3)

如果您正在为视图控制器使用导航控制器,请尝试更改属性:

NavigationController.NavigationBar.BarStyle

“默认”应为黑色,“LightContent”应为白色。我相信黑色选项已被弃用。

否则,您可以在Info.plist中选择基于View Controller的状态栏样式,并使用preferredStatusBarStyle property提到的here

在ViewDidLoad方法中,执行SetNeedsStatusBarAppearanceUpdate();

添加以下方法:

 public override UIStatusBarStyle PreferredStatusBarStyle()
 {
        return UIStatusBarStyle.LightContent; //Or Default/Black/etc.
 }

注意:在iOS 9中已弃用UIApplication.SharedApplication来更改状态栏样式。请改用上述方法。希望这有帮助。干杯!

答案 2 :(得分:0)

如果使用导航控制器,则添加:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
}