Swift 3:获取按钮到屏幕底部的距离

Posted

技术标签:

【中文标题】Swift 3:获取按钮到屏幕底部的距离【英文标题】:Swift 3: Get distance of button to bottom of screen 【发布时间】:2017-01-27 17:34:14 【问题描述】:

我想在 Swift 3 中获取按钮到屏幕底部的距离。

当我查看距离(alt 键)时,我可以在情节提要中看到正确的值,但不幸的是我无法手动计算。

我正在寻找的值与按钮​​的“垂直间距到底部布局”约束中的常量相同。

view.frame.maxY - randomButton.frame.maxY

给我的价值太高了。

【问题讨论】:

请添加更多代码,例如 where 这一行。取决于它在哪里——比如 viewDidLoad()——你实际上可能会得到一个负值。 我说的是你实际上想要做什么?听起来您想在按钮和屏幕底部之间放置另一个视图?如果是这样,您应该使用自动布局或堆栈视图。 代码是viewDidLoad 你不应该计算viewDidLoad中的UI相关操作。将您的代码移入viewDidLayoutSubviesviewDidAppear 我试过了,但不幸的是我得到了和以前一样的结果 【参考方案1】:
view.frame.size.height - (button.frame.size.height + button.frame.origin.y)

我觉得还可以!希望对你有帮助

【讨论】:

嘿,从按钮到视图顶部你会怎么做?【参考方案2】:

如果您的按钮不是视图控制器视图的直接继承者(也就是,层次结构类似于 ViewController 的 View -> SomeOtherView->Button),则仅使用框架将无法获得正确的数学运算。您必须将按钮的 Y 位置转换为窗口对象或视图控制器的主视图的坐标空间。

看看这个问题:Convert a UIView origin point to its Window coordinate system

let realOrigin = someView.convert(button.frame.origin, to: self.view)

然后应用 Lucas Palaian 建议的数学。

let bottomSpace = view.frame.maxY - (button.frame.height + realOrigin.y)

另一个解决方法是,如果那里发生了一些非常疯狂和奇怪的事情,那就是拖放按钮底部约束的出口。 (从 Interface Builder 的视图层次结构中选择约束,按住 control 键并将约束拖动到视图控制器。)然后在您的代码中您可以访问该常量。

let bottomSpace = myButtonBottomConstraint.constant

【讨论】:

如果你在代码中改变了superview的框架,约束总是一样的。【参考方案3】:

使用它从按钮底部到视图底部(已测试):

view.frame.size.height - randomButton.frame.size.height/2 - randomButton.frame.origin.y

【讨论】:

为什么是高度/2? 如果它的起源在中心!如果它在顶部,它只是高度,如果它在底部,则不应从高度中减去任何内容。【参考方案4】:

我需要找到距 UICollectionView 底部边缘的距离 到屏幕的底部边缘。

此代码适用于我:

@IBOutlet weak var collectionView: UICollectionView!

private var bottomSpace = CGFloat()

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    bottomSpace = UIScreen.main.bounds.height - collectionView.frame.maxY

这个方法被调用了几次它给出了正确的结果。

【讨论】:

以上是关于Swift 3:获取按钮到屏幕底部的距离的主要内容,如果未能解决你的问题,请参考以下文章

uniapp 之 获取底部安全距离,状态栏高度等

uniapp 之 获取底部安全距离,状态栏高度等

uniapp 之 获取底部安全距离,状态栏高度等

jquery获取元素到屏幕底的可视距离

Swift - UIButton 没有固定在屏幕底部

如何在 UITableView swift 3 中使用动画在底部滚动