Как создать тот же интерфейс для устройств iOS с помощью UICollectionViewCompositionalLayout?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как создать тот же интерфейс для устройств iOS с помощью UICollectionViewCompositionalLayout?

Сообщение Anonymous »

Я хочу, чтобы мой интерфейс выглядел одинаково на iPhone и iPad. Как на моих изображениях:
Изображение
И я использую UICollectionCompostionLayout и этот код:

Код: Выделить всё

func carouselSection(using section: Section) -> NSCollectionLayoutSection {

let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
let layoutItem = NSCollectionLayoutItem(layoutSize: itemSize)

var layoutGroupSize = NSCollectionLayoutSize(widthDimension: .absolute(0), heightDimension: .absolute(0))
var layoutGroup = NSCollectionLayoutGroup.horizontal(layoutSize: layoutGroupSize, subitems: [layoutItem])

switch UIDevice.current.userInterfaceIdiom {
case .phone:

let a:CGFloat = UIScreen.main.bounds.size.height/8
let b:CGFloat = UIScreen.main.bounds.size.height

layoutGroupSize = NSCollectionLayoutSize(widthDimension: .absolute(b - (a) ), heightDimension: .absolute(b))
layoutGroup = NSCollectionLayoutGroup.horizontal(layoutSize: layoutGroupSize, subitems: [layoutItem])
layoutGroup.contentInsets = NSDirectionalEdgeInsets(top: a, leading: a/2, bottom: a, trailing: a/2)

case .pad:

let a:CGFloat = UIScreen.main.bounds.size.height*0.25
let h:CGFloat = a * 1.8
let b:CGFloat = UIScreen.main.bounds.size.height

layoutGroupSize = NSCollectionLayoutSize(widthDimension: .absolute(b - (h)), heightDimension: .absolute(b - (a)))
layoutGroup = NSCollectionLayoutGroup.horizontal(layoutSize: layoutGroupSize, subitems: [layoutItem])
layoutGroup.contentInsets = NSDirectionalEdgeInsets(top: a, leading: a/10, bottom: 0, trailing: a/10)

default:

print(UIScreen.main.bounds.size.height)
}

let layoutSection = NSCollectionLayoutSection(group: layoutGroup)
layoutSection.orthogonalScrollingBehavior = .groupPagingCentered

layoutSection.visibleItemsInvalidationHandler = { (items, offset, environment) in
items.forEach { item in
let distanceFromCenter = abs((item.frame.midX - offset.x) - environment.container.contentSize.width / 2.0)
let minScale: CGFloat = 0.7
let maxScale: CGFloat = 1.1
let scale = max(maxScale - (distanceFromCenter / environment.container.contentSize.width), minScale)
item.transform = CGAffineTransform(scaleX: scale, y: scale)
}
}

return layoutSection
}
Я получаю примерно тот результат, который хочу. Но меня беспокоит мой код. Я делаю слишком много странных вычислений, чтобы мой интерфейс выглядел одинаково на iPhone и iPad. Также я делаю разные вычисления для iPhone и iPad, хотя UICollectionCompostionLayout был создан специально для минимума вычислений, но интерфейсы выглядели одинаково на разных устройствах. Что мне следует исправить в своем коде?

Подробнее здесь: https://stackoverflow.com/questions/783 ... ewcomposit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»