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

标签 ios xcode storyboard simulator

在 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/

相关文章:

ios - 在 Swift 3 中更改 UIBarButtonItem(图像)的大小

objective-c - 用于 Objective-C 和 iOS 开发(XCode 除外)的 IDE

iphone - Storyboards VS xib 的使用理念

Xcode 按钮,图像消失

ios - 显示所有已安装应用程序的列表

ios - NSPredicate 过滤器数组使用定界符前的所有字符

iphone - Facebook SDK 3.1 上的 iOS 6 native 支持问题

ios - Cordova 3.5 iOS - CDVCamera 的 Xcode Apple Mach-O 链接器错误

ios - 避免在 2 个地方硬编码 Storyboard ID

ios - 查看后如何删除通知中心的推送通知