При разработке приложения на XCode у меня возникает проблема, при которой выравнивание определенных меток / представлений изображений корректно только в симуляторе, если параметр «Вид как:» в раскадровке соответствует тому же типу устройства.
Я создаю приложение, которое содержит квадрат около середины экрана (представление изображения) и внутри него набор изображений меньшего размера, расположенных по кругу.
Если я иду к раскадровке и просматриваюэкран как отдельное устройство (т.е. iPhone Xs), когда я запускаю то же устройство на симуляторе (также iPhone Xs), все идеально выровнено.Если затем я вернусь к раскадровке, просматривая экран как альтернативное устройство (например, iPhone 8), и перезапущу симулятор (все еще iPhone Xs), выравнивания отключены.
Квадрат (который выполняется с помощью автоматического определения расположения)в раскадровке) выглядит хорошо во всем, в то время как меньшие изображения, которые создаются в коде на лету, являются ошибочными.Их позиции основаны на центре квадрата, который рассчитывается как self.squareView.center.x и self.squareView.center.y.Похоже, что эти расчеты основаны на том, какой экран находится в раскадровке, а не на экране в симуляторе.
Кто-нибудь сталкивался с подобными проблемами или знает, как это можно решить?
Кодниже:
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
Я не совсем уверен, что две нижние строчки кода совершенно верны.