如何获取直到标签栏底部的屏幕尺寸

Posted

技术标签:

【中文标题】如何获取直到标签栏底部的屏幕尺寸【英文标题】:how to get the screen size until the bottom of the tabbar 【发布时间】:2021-12-16 17:45:57 【问题描述】:

我正在处理自定义标签栏按钮的东西,想知道如何使用视图的高度或以编程方式向上移动按钮。

我有这个加号按钮,我想从底部向上移动 10pt。

let newButton = UIButton(frame: CGRect(x: 0, y: 0, width: 65, height: 65))
newButton.imageView?.contentMode = .scaleAspectFit
newButton.contentHorizontalAlignment = .fill
newButton.contentVerticalAlignment = .fill
      
var newButtonFrame = newEventButton.frame
newButtonFrame.origin.y = view.bounds.height - 65 - 10

所以上面的代码在 iPhone 没有 Home 键槽口的情况下有效。比如获取视图的高度并减去按钮高度和 10。

但是,很明显,当有一个缺口时,它就会变成如下图所示的样子。

我想将按钮从标签栏底部向上移动,那么我怎样才能将屏幕的高度直到标签栏底部,这在有/没有 Home Notch 的情况下都适用?

【问题讨论】:

您在寻找 safeAreaEdges 吗? 【参考方案1】:

虽然@wonder 的回答完全正确,但仍有一些缺陷。

首先你不应该像这样使用框架来确定视图布局。

其次,无需为此进入窗口的 UIApplication 单例。因为它位于父母视图中。在safeAreaInsetssafeAreaLayoutGuide 中。

布局指南是针对锚点的,这比框架更具可持续性。

这里有它的外观示例代码:

let newButton = UIButton()
newButton.imageView?.contentMode = .scaleAspectFit
newButton.contentHorizontalAlignment = .fill
newButton.contentVerticalAlignment = .fill
NSLayoutConstraint.activate([
    newButton.heightAnchor.constraint(equalTo: 65),
    newButton.widthAnchor.constraint(equalTo: 65),
    newButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
    newButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -10)
])

【讨论】:

感谢沃兰。是的,@wonder 的答案是正确的,但我更喜欢你的代码。我想知道(因为它类似于我的原始代码),但我在我的项目中添加了您的代码。两者都有效!谢谢! 别担心,祝你的项目好运:)【参考方案2】:

对于按钮来源使用安全是插入,ıf 设备有缺口 safeAreaBottom 将像 44 ,如果没有它将是 0:

let safeAreaBottom = UIApplication.shared.windows.first?.safeAreaInsets.bottom

然后使用它:

newButtonFrame.origin.y = view.bounds.height - safeAreaBottom - 65 - 10

【讨论】:

以上是关于如何获取直到标签栏底部的屏幕尺寸的主要内容,如果未能解决你的问题,请参考以下文章

如何获取系统导航栏的高度?

获取Android屏幕尺寸控件尺寸状态栏/通知栏高度导航栏高度

状态栏、导航栏、PopupWindow的使用

Android分享笔记 获取屏幕尺寸,包括状态栏

如何在本机反应中隐藏特定屏幕上的底部导航栏?

如何更改VirtualBox默认的最大屏幕尺寸