gpt4 book ai didi

ios - Xcode Storyboard屏幕类型影响模拟器内的布局

转载 作者:行者123 更新时间:2023-11-29 05:43:17 25 4
gpt4 key购买 nike

在 Xcode 上开发应用程序时,我遇到一个问题,即只有当 Storyboard中的“查看方式:”选项与相同的设备类型匹配时,某些标签/ ImageView 的对齐才在模拟器上正确。

我正在创建一个应用程序,其中包含靠近屏幕中间的一个正方形( ImageView ),并在其中包含一堆排列成圆圈的较小 ImageView 。

如果我转到 Storyboard并将屏幕视为特定设备(即 iPhone Xs),那么当我在模拟器(也是 iPhone Xs)上运行同一设备时,一切都完美对齐。如果我然后返回 Storyboard,将屏幕视为备用设备(即 iPhone 8),并重新运行模拟器(仍然是 iPhone Xs),则对齐将关闭。

正方形(在 Storyboard 中使用自动布局完成)整体看起来不错,而在代码中动态创建的较小 ImageView 却是错误的。它们的位置基于正方形的中心,计算方式为 self.squareView.center.x 和 self.squareView.center.y。这些计算似乎基于 Storyboard中的屏幕,而不是模拟器中的屏幕。

有人遇到过类似的问题或知道如何解决吗?

代码如下:

let radius = 1.4 // these will be arranged in a circle within the square view.
let angleStep = Float(2.0 * Double.pi) / Double(arrayOfImages.count) // arrayOfImages.count will be a number between 5 and 7.
let yPos: Float = cosf(angleStep * radius)
let xPos: Float = sinf(angleStep * radius)

// The below is to determine the midpoint of the view that I am having the issue with:

let setCenter = CGPoint(x: self.squareView.center.x + CGFloat(xPos), y: self.squareView.center.y + CGFloat(yPos)


// Then the code to arrange the image view:

arrayOfImages[i].frame = CGRect(x:CGFloat(xPos), y:CGFloat(yPos), width: 30, height: 30)
arrayOfImages[i].center = setCenter

我不太确定下面两行代码是否正确。

最佳答案

我也遇到过类似的问题,模拟器需要匹配 Storyboard设备显示才能正常工作。

我认为我已经通过在 View Controller 中的 viewDidLayoutSubviews() 方法期间获取 View 的边界解决了我的问题。

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let setCenter = CGPoint(x: self.squareView.center.x + CGFloat(xPos), y:
self.squareView.center.y + CGFloat(yPos)

arrayOfImages[i].frame = CGRect(x:CGFloat(xPos), y:CGFloat(yPos), width: 30, height: 30)
arrayOfImages[i].center = setCenter
}

看来您引用的 squareView 的高度和宽度值在生命周期的这一部分之前可能不准确。

关于ios - Xcode Storyboard屏幕类型影响模拟器内的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369325/

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