代码之家  ›  专栏  ›  技术社区  ›  cdub

将导航栏放在安全区域的顶部

  •  0
  • cdub  · 技术社区  · 6 年前

    我升级到了新的iphone并升级了我的应用程序。我添加了x/xr/xs布局,这样黑色边框就消失了。

    我在视图的顶部有一个导航栏,但现在它进入状态栏太多了?我该怎么解决?以编程方式而不是故事板(学习代码)。

    一些代码:

    func buildTopbar()
    {
        statusbar = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 20));
    
        statusbar.backgroundColor = UIColor(red: 247/255, green: 247/255, blue: 247/255, alpha: 1.0);
    
        navigationbar = UINavigationBar(frame: CGRect(x: 0, y: 20, width: self.view.bounds.width, height: 44));
    
        navigationbar.barTintColor = UIColor(red: 247/255, green: 247/255, blue: 247/255, alpha: 1.0);
    
        let texta = UIBarButtonItem(title: "A", style: .plain, target: self, action: #selector(settingToolbar(sender:)));
        let textb = UIBarButtonItem(title: "B", style: .plain, target: self, action: #selector(inviteToolbar(sender:)));
    
        texta.tintColor = ColorHelper.primaryColor();
        textb.tintColor = ColorHelper.primaryColor();
    
        ...
    
        navigationbar.setItems([title], animated: false);
    
        self.view.addSubview(statusbar);
        self.view.addSubview(navigationbar);
    }
    

    我把状态栏设置为20,这就是旧手机的状态。

    4 回复  |  直到 6 年前
        1
  •  1
  •   Talha Ahmad Khan    6 年前

    我建议创建一个uinavigationcontroller并将您的控制器添加到导航控制器中,它将自动调整导航栏。

    如果您想手动添加导航栏。 你必须把它设置在Y框的正确位置。

    计算导航条的起始y位置

    let startingYPos = UIApplication.sharedApplication.statusBarFrame.size.height;
    navigationbar = UINavigationBar(frame: CGRect(x: 0, y: startingYPos, width: self.view.bounds.width, height: 44));
    
        2
  •  1
  •   Mick    6 年前

    我的建议是在顶部添加一些约束,并根据您的iphone设备大小或ios版本设置约束值。最近我是这样做的。我的问题是ios版本,我的视图靠近状态栏,所以我用编程的方式设置了一些限制并处理了它。这样就不会影响iphone 7以下的iphone屏幕。

    In Viewdidload()
         if #available(iOS 11, *)  {
                }
                else{
                    topConstraints.constant = 20
                }
    

    在这里我检查了版本。你也可以检查设备,你可以设置限制。如果你想检查设备,请告诉我。

    希望能成功!!

        3
  •  0
  •   nikksindia    6 年前

    状态栏的高度现在已从20磅变为44磅(从iPhoneX开始)。如果要使用现有代码,则需要对状态栏高度应用设备特定的检查。

    这里有一篇文章更详细地解释了导航条的布局(适用于iPhoneX和更高版本的设备):

    What is the top bar height of iPhone X?

        4
  •  0
  •   Suhail    6 年前

    我建议您选择屏幕高度,并将其设置为:

    if UIScreen.main.bounds.size.height > 750 {
            navigationBar  = UINavigationBar(frame: CGRect(x: 0, y: 43, width: view.frame.size.width, height: 44))
        }
        else{
            navigationBar  = UINavigationBar(frame: CGRect(x: 0, y: 20, width: view.frame.size.width, height: 44))
        }
    

    如果您的视图具有滚动视图,则可能不起作用它的高度设置为大于默认值,然后尝试:

    视图.边界.大小.高度