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相关操作。将您的代码移入viewDidLayoutSubvies
或viewDidAppear
我试过了,但不幸的是我得到了和以前一样的结果
【参考方案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:获取按钮到屏幕底部的距离的主要内容,如果未能解决你的问题,请参考以下文章