gpt4 book ai didi

Swift:设备横向启动时约束不正确

转载 作者:行者123 更新时间:2023-11-28 11:38:13 25 4
gpt4 key购买 nike

我目前有一个应用程序,我可以在其中以编程方式设置约束。当应用程序以横向模式启动时会出现问题。当应用程序以横向模式启动时,UIViews 宽度和高度的大小会超出屏幕。但是,当应用程序以纵向模式启动时,应用程序没有问题,并且在旋转时它会正确地保持其约束。这似乎只有在横向打开应用程序时才会出现问题。这是我的代码和屏幕截图:

  func setUpGameBoard(){
let width = UIScreen.main.bounds.width
let gameBoard = Gameboard(frame: .zero, mainVC: self)
self.view.addSubview(gameBoard)
gameBoard.translatesAutoresizingMaskIntoConstraints = false
gameBoard.widthAnchor.constraint(equalToConstant: width).isActive = true
gameBoard.heightAnchor.constraint(equalToConstant: width).isActive = true
gameBoard.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
gameBoard.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

}

When app started in landscape

这里是直立启动时,旋转时没有问题。

when app started in portrait

最佳答案

基本上,横向屏幕的宽度要大得多。发生这种情况是因为在横向中,宽度(您在纵向中使用的)变成了高度。

This is a really good and useful resource by Apple to understand what they call Auto layout: Auto Layout Guide

你的问题是关于Size Classes的,它们是一个高级的自动布局系统,你可以在这里了解更多Size Classes specific Auto Layout

This is a really good tutorial for Auto Layout by Ray Wenderlich: Auto Layout Tutorial

有几种方法可以实现您的目标:

1. 如果您可以从 Storyboard 中设置约束,则使用 Size Class 根据纵向/横向设置不同的约束会更容易,您会发现很多教程和资源,但我链接你this one .它是意大利语的,但我向你保证这是关于尺寸等级的完整内容,并且通过谷歌翻译它会很容易理解。

2.您可以使用此代码检查您处于何种模式:

    if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft {

} else if UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {

} else if UIDevice.current.orientation == UIDeviceOrientation.portrait {

} else if UIDevice.current.orientation == UIDeviceOrientation.portraitUpsideDown {

}

3.您可以“手动”检查宽度:

是的。

// I used a random value, but it should be around the width value in portrait
if(width > 389){
width = 389
}

4. 以编程方式使用Size Classes 也是一种解决方案,但我从未使用过它。然而,这是一个关于如何以编程方式使用它们的很好的教程:Using Trait Collections for Auto Layout and Size Classes

关于Swift:设备横向启动时约束不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54506172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com