在具有自动布局的iPhone X之后,我已经开始使用安全区域。
现在,我想从屏幕底部到所有其他屏幕绘制一个视图,并从安全区域底部为iPhone X绘制一个视图。
我去过,using self.view.frame.size.height
但由于明显的原因,它会在安全区域以下创建。
如何获取安全区域终点,以便可以在安全区域内绘制视图?
编辑:我不是以编程方式创建安全区。
如果不使用safeAreaLayoutGuide(我的目标是IOS 9+),是否有任何方法可以以编程方式获取IOS中“安全区域”的高度,而不必为此专门创建新视图(仅限于安全区域)?
我无法将插座设置为安全区域,因为它不是UIView ...甚至不是任何种类的类。
如果我只在ViewController中使用self.view.height,它将太高(错误)。
还有其他方法吗?
iOS11中有一个iPhoneX模拟器有问题.
我有一个没有状态栏的viewcontroller.要做到这一点,我添加:
- (BOOL)prefersStatusBarHidden {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止它还不错,但导航栏与iPhoneX中的safearea重叠.
我怎样才能解决这个问题?
在我的应用程序中,我有这个错误 -
safeAreaLayoutGuide' is only available on iOS 11.0 or newer
Run Code Online (Sandbox Code Playgroud)
在这段代码中,错误出现了 3 次。基本上在我使用 safeArea 的每一行中。
NSLayoutConstraint.activate([
stackViewBottomConstrols.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
stackViewBottomConstrols.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
stackViewBottomConstrols.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
stackViewBottomConstrols.heightAnchor.constraint(equalToConstant: 50)
])
Run Code Online (Sandbox Code Playgroud)
我可以检查是否IOS 11
可用并运行此代码并在else
语句中添加另一个代码,该代码具有相同的代码但没有safeArea。这是否会显示与if
声明中相同的视图。如果没有,还有其他解决方案吗?
此代码是否适用于不具有相同 IOS 11 的设备?——
if #available(iOS 11.0, *) {
NSLayoutConstraint.activate([
stackViewBottomConstrols.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
stackViewBottomConstrols.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
stackViewBottomConstrols.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
stackViewBottomConstrols.heightAnchor.constraint(equalToConstant: 50)
])
} else {
NSLayoutConstraint.activate([
stackViewBottomConstrols.bottomAnchor.constraint(equalTo: view.bottomAnchor),
stackViewBottomConstrols.leadingAnchor.constraint(equalTo: view.leadingAnchor),
stackViewBottomConstrols.trailingAnchor.constraint(equalTo: view.trailingAnchor),
stackViewBottomConstrols.heightAnchor.constraint(equalToConstant: 50)
])
}
Run Code Online (Sandbox Code Playgroud) 在 Xamarin Forms 中,我使用
<ContentPage
xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
ios:Page.UseSafeArea="true" >
Run Code Online (Sandbox Code Playgroud)
使应用程序 UI 与 iPhone X 兼容,但它只能在 iOS 11 中工作。有人对如何在所有 iOS 设备上工作有建议吗?
如果我想要一个与iOS 11之前的设备兼容的应用程序,是否需要每个将视图的某些属性链接到self.view的约束的代码,以便遵守safeAreaLayoutGuide?
if #available(iOS 11.0, *) {
NSLayoutConstraint.activate([
theImage.heightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.heightAnchor, multiplier: 0.5)
theImage.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20),
theImage.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -view.frame.width/8)
])
} else {
NSLayoutConstraint.activate([
theImage.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.5)
theImage.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20),
theImage.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -view.frame.width/8),
])
}
Run Code Online (Sandbox Code Playgroud)