首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自定义UIToolbar离iPhone X上的home指示器太近

自定义UIToolbar离iPhone X上的home指示器太近
EN

Stack Overflow用户
提问于 2018-01-13 10:19:17
回答 2查看 6.3K关注 0票数 10

我有一个自定义的UIToolbar,当标签栏被隐藏时,我会显示它。工具栏按钮与iPhone X上的主页指示器太近:

代码语言:javascript
复制
let toolbar = UIToolbar()
let height = tabBarController?.tabBar.frame.height
toolbar.frame = CGRect(x: 0, y: view.bounds.height - height, width: view.bounds.width, height: height)
toolbar.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
view.addSubview(toolbar)

按钮离主页指示器太近

这就是我想要的样子(邮件应用)^

由于这是一个自定义视图,我知道我可以更改y位置并将其移动到安全区域的底部,但我更愿意移动按钮。我使用的是普通的UIBarButtonItem,中间有灵活的空间。

EN

回答 2

Stack Overflow用户

发布于 2018-11-14 01:51:48

您不需要设置明确的高度或大小来使其工作,只需利用UIToolbarDelegate采用的layoutMarginsGuideUIBarPositioningDelegate协议即可。首先,对工具栏进行布局,使其固定在视图的layoutMarginsGuide的底部。

代码语言:javascript
复制
let constraints = [
    toolbar.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    toolbar.trailingAnchor.constraint(equalTo: view.trailingAnchor),
    toolbar.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor)
]
NSLayoutConstraint.activate(constraints)

这将使工具栏与iOS 11+设备上的安全区域对齐,但您需要做最后一件事才能使工具栏将其背景一直延伸到视图的底部。要使其简单地符合类中的UIToolbarDelegate,请将您自己设置为工具栏的委托,实现函数position(for: UIBarPositioning) -> UIBarPosition,并返回值.bottom。UIToolbar的barPosition的默认值是bottom,因此在大多数用例中最后这一步可能不是必需的。完成此操作后,您应该会看到工具栏中的项目相对于安全区域进行了布局,同时将背景一直延伸到视图底部,就像您在Mail和Safari中看到的那样。

在这种情况下,使用layoutMarginsGuide而不是safeAreaLayoutGuide的美妙之处在于,默认情况下,layoutMarginsGuide通过安全区域插入布局边距。因为您不直接引用安全区域,所以您的代码一直向后兼容到iOS 9,而不必使用可用性检查。

票数 4
EN

Stack Overflow用户

发布于 2018-05-30 09:41:41

我也遇到了这个问题。我的解决方案是使用一个通用的UIView来说明底层的safeAreaInset,然后将工具栏添加为该视图的子视图。

代码语言:javascript
复制
private func addToolbar(_ toolbar: UIToolbar, toView view: UIView) {
    toolbar.frame = CGRect(x: 0,
                           y: 0,
                           width: view.frame.size.width,
                           height: 0)
    toolbar.sizeToFit() // This sets the standard height for the toolbar.

    // Create a view to contain the toolbar:
    let toolbarParent = UIView()
    toolbarParent.frame = CGRect(x: 0,
                                 y: view.frame.size.height - toolbar.frame.size.height,
                                 width: toolbar.frame.size.width,
                                 height: toolbar.frame.size.height)

    // Adjust the position and height of the toolbar's parent view to account for safe area:
    if #available(iOS 11, *) {
        toolbarParent.frame.origin.y -= view.safeAreaInsets.bottom
        toolbarParent.frame.size.height += view.safeAreaInsets.bottom
    }

    toolbarParent.addSubview(toolbar)
    view.addSubview(toolbarParent)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48236375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档