我有一个iOS应用程序,该应用程序将图像放置在相对于特定输入滑块放置位置的垂直位置,该位置可能会因手机和顶部的安全区域而异。除了在iPhone X上,该代码还可以正常工作。
这是我获取滑块的垂直位置,然后根据我的“ rate”变量计算图像的y位置的方法。
var zeroVert = Int(slider8.center.y)
var vertical: Int = zeroVert - 6 - Int(rate*20)
如何以编程方式针对安全区域进行调整?
[更新]我刚刚尝试获取安全区域插图(使用iPhone Xs max模拟器),但是它返回零。
if #available(iOS 11.0, *) {
insetTop = Int(view.safeAreaInsets.top)
}
[更新2]现在我想到了,只要正确知道滑块的位置,我就不必在意安全区域边距。图像仅与此相对。所以我的问题是我似乎无法获取滑块的正确位置。
答案 0 :(得分:0)
我找到了部分解决方案。它基于bsod的回答: Get safe area inset top and bottom heights
在布局好子视图之前,获取屏幕对象的位置并不重要。
var zeroVert: Int = 0
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
zeroVert = Int(slider8.center.y) // My slider
placeArrows() // The function that places the image based on the slider position
}
这似乎正在工作。我的placeArrows()函数在其他地方调用,我认为现在可能是多余的,因为在布置子视图时会重复调用它。但这是一个简短的功能,很快就会过去。除非您能帮助我找出更好的方法,否则目前为止已经足够好了。
如果我在拥有滑块的有效位置后未运行placeArrows()函数,它将使用初始化值zeroVert(已将其设置为零)以防止其出现在屏幕上。