Тип экрана раскадровки Xcode, влияющий на макет в симуляторе - PullRequest
0 голосов
/ 30 мая 2019

При разработке приложения на 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

Я не совсем уверен, что две нижние строчки кода совершенно верны.

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

У меня возникла похожая проблема, когда симулятору необходимо соответствовать дисплею устройства раскадровки для правильной работы.

Мне кажется, я решил свои проблемы, получив границы для представления во время viewDidLayoutSubviews() метод в моем контроллере вида.

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, на который вы ссылаетесь, может быть неточным, пока эта часть в жизненном цикле.

0 голосов
/ 30 мая 2019

Не могли бы вы показать код расчета позиции? Возможно, в коде есть какая-то проблема.

...