Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 自动布局未正确处理iPhone X凹口_Swift_Autolayout_Constraints_Iphone X_Pagecontrol - Fatal编程技术网

Swift 自动布局未正确处理iPhone X凹口

Swift 自动布局未正确处理iPhone X凹口,swift,autolayout,constraints,iphone-x,pagecontrol,Swift,Autolayout,Constraints,Iphone X,Pagecontrol,我已经使用swift在我的应用程序顶部实现了一个pageViewIndicator。我经常在我的个人iPhone上测试它,它已经工作了,但是当使用iPhone X模拟器时,我注意到它消失在凹口后面,仅仅是因为我没有参考将它放置在安全区域内,或者安全区域尚未正确配置。以下是比较: 这似乎是一个简单的问题,但我目前还没有找到任何关于如何处理此问题的适当支持:主要建议是调整safeAreaInsets,但我不知道如何将此应用于自动布局功能。我曾尝试向pageController添加topAncho

我已经使用swift在我的应用程序顶部实现了一个pageViewIndicator。我经常在我的个人iPhone上测试它,它已经工作了,但是当使用iPhone X模拟器时,我注意到它消失在凹口后面,仅仅是因为我没有参考将它放置在安全区域内,或者安全区域尚未正确配置。以下是比较:

这似乎是一个简单的问题,但我目前还没有找到任何关于如何处理此问题的适当支持:主要建议是调整safeAreaInsets,但我不知道如何将此应用于
自动布局
功能。我曾尝试向pageController添加topAnchor约束,但是否可以使用基本算法编辑此约束

pageControl.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
没有必要“调整”任何东西。安全区的全部意义在于,它的顶部位于非X型iPhone上的状态栏下方,以及iPhone X上的“凹口”下方。这就是安全区的用途

因此,只需将页面控件的顶部固定到安全区域的顶部即可。以下是它在iPhone 5s模拟器上的外观:

以下是它在iPhone X模拟器上的外观:

无需“调整”任何内容。安全区的全部意义在于,它的顶部位于非X型iPhone上的状态栏下方,以及iPhone X上的“凹口”下方。这就是安全区的用途

因此,只需将页面控件的顶部固定到安全区域的顶部即可。以下是它在iPhone 5s模拟器上的外观:

以下是它在iPhone X模拟器上的外观:


我发现了我的问题,其实我只是简单地监督了一下:我忘了添加

pageControl.translatesAutoResizengMaskintoConstraints=false

在将其添加为子视图之前,将其添加到pageControl。有了它,我能够分配以下约束,以将我的pageController正确定位到我想要的位置:

let safeViewMargins = self.view.safeAreaLayoutGuide
pageControl.topAnchor.constraint(equalTo: safeViewMargins.topAnchor).isActive = true
pageControl.leadingAnchor.constraint(equalTo: safeViewMargins.leadingAnchor).isActive = true
pageControl.trailingAnchor.constraint(equalTo: safeViewMargins.trailingAnchor).isActive = true

这在所有设备上都能完美运行。

我发现了我的问题,实际上我只是简单地监督了一下:我忘了添加

pageControl.translatesAutoResizengMaskintoConstraints=false

在将其添加为子视图之前,将其添加到pageControl。有了它,我能够分配以下约束,以将我的pageController正确定位到我想要的位置:

let safeViewMargins = self.view.safeAreaLayoutGuide
pageControl.topAnchor.constraint(equalTo: safeViewMargins.topAnchor).isActive = true
pageControl.leadingAnchor.constraint(equalTo: safeViewMargins.leadingAnchor).isActive = true
pageControl.trailingAnchor.constraint(equalTo: safeViewMargins.trailingAnchor).isActive = true

这在所有设备上都能完美运行。

我在当前升级的应用程序中遇到了同样的问题。它在主屏幕的右侧有一列按钮。在切口位于右侧的横向中,按钮部分被切断。如果不需要的话,我不想移动按钮,因为这样会大大减少左侧消息区域的尺寸,尤其是在纵向模式下

我在Xcode中没有看到对应于“安全区域”的约束,也不想进入动态定位的兔子洞,所以我的解决方案是将方向限制为纵向和横向右侧(即左侧的凹口)

如果我们有每个设备类型的定向限制,那就太好了,但我不会为此屏住呼吸


希望几年后,这种丑陋的刻痕时尚会消失。

我目前正在升级的一个应用程序也有同样的问题。它在主屏幕的右侧有一列按钮。在切口位于右侧的横向中,按钮部分被切断。如果不需要的话,我不想移动按钮,因为这样会大大减少左侧消息区域的尺寸,尤其是在纵向模式下

我在Xcode中没有看到对应于“安全区域”的约束,也不想进入动态定位的兔子洞,所以我的解决方案是将方向限制为纵向和横向右侧(即左侧的凹口)

如果我们有每个设备类型的定向限制,那就太好了,但我不会为此屏住呼吸


希望几年后,这种丑陋的刻痕时尚会消失。

这是有道理的,但如何将其“固定”到安全区域呢。在定义y位置时,是否有任何方法将其分配到安全区域内可能的最高点?是的,只需将页面控件的顶部设置为安全区域的顶部(常数为零)。听起来您可能对自动布局一无所知。你最好开始学习它,因为如果你想让你的界面在所有尺寸的手机上都能工作,这是至关重要的。
pageControl=UIPageControl(frame:CGRect(x:0,y:0,width:view.bounds.width,height:0))
是我用来定义页面控制的代码。然而,问题在于,它将iPhone X的pageControl定位在耳朵的边缘,就在中间,完全忽略了凹口。给y值赋值50会将其设置在不可见区域之外,但会使所有其他设备在视觉上都不适合。对,因为我不是这么说的<代码>UIPageControl(frame:不是自动布局。它不是将任何内容“固定”到任何内容。了解有关自动布局的信息。尝试谷歌搜索;这虽然不多,但只是一个开始。这很有意义,但如何“固定”呢在定义y位置时,是否有办法将其分配到安全区域内可能的最高点?是的,只需将页面控件的顶部设置为安全区域的顶部(常数为零)。听起来你可能对自动布局一无所知。你最好开始学习它,因为如果你想让你的界面适用于所有尺寸的手机,这一点至关重要。
pageControl=UIPageControl(frame:CGRect(x:0,y:0,width:view.bounds.width,height:0))
是我用来定义pageControl的代码。然而,问题是它将iPhone X的pageControl定位在耳朵的边缘,就在中间,完全忽略了