如何获得直到标签栏底部的屏幕尺寸
how to get the screen size until the bottom of the tabbar
我正在处理自定义标签栏按钮的东西,想知道如何使用视图的高度或以编程方式向上移动按钮。
我有这个加号按钮,我想从底部向上移动 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 没有主页按钮槽口时有效。比如获取视图的高度并减去按钮高度和 10。
但是,很明显,当有一个缺口时,它就会变成下图这样的东西。
我想将按钮从标签栏的底部向上移动,那么我怎样才能获得屏幕的高度直到标签栏的底部,这在两个 with/without 主屏幕上都有效?
对于按钮原点,使用 safe 是 insets,如果设备有凹口,safeAreaBottom 将像 44,如果没有,它将是 0:
let safeAreaBottom = UIApplication.shared.windows.first?.safeAreaInsets.bottom
那就用吧:
newButtonFrame.origin.y = view.bounds.height - safeAreaBottom - 65 - 10
虽然@wonder 的回答完全正确,但仍有一些缺陷。
首先,您不应该像这样使用框架来确定视图布局。
其次,无需为此访问 windows 的 UIApplication 单例。因为它位于 parents 视图中。在 safeAreaInsets
或 safeAreaLayoutGuide
.
中
布局指南针对锚点,比框架更可持续。
这里有示例代码:
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)
])
我正在处理自定义标签栏按钮的东西,想知道如何使用视图的高度或以编程方式向上移动按钮。
我有这个加号按钮,我想从底部向上移动 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 没有主页按钮槽口时有效。比如获取视图的高度并减去按钮高度和 10。
但是,很明显,当有一个缺口时,它就会变成下图这样的东西。
我想将按钮从标签栏的底部向上移动,那么我怎样才能获得屏幕的高度直到标签栏的底部,这在两个 with/without 主屏幕上都有效?
对于按钮原点,使用 safe 是 insets,如果设备有凹口,safeAreaBottom 将像 44,如果没有,它将是 0:
let safeAreaBottom = UIApplication.shared.windows.first?.safeAreaInsets.bottom
那就用吧:
newButtonFrame.origin.y = view.bounds.height - safeAreaBottom - 65 - 10
虽然@wonder 的回答完全正确,但仍有一些缺陷。
首先,您不应该像这样使用框架来确定视图布局。
其次,无需为此访问 windows 的 UIApplication 单例。因为它位于 parents 视图中。在 safeAreaInsets
或 safeAreaLayoutGuide
.
布局指南针对锚点,比框架更可持续。
这里有示例代码:
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)
])