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 был создан специально для минимума вычислений, но интерфейсы выглядели одинаково на разных устройствах. Что мне следует исправить в своем коде?
Я хочу, чтобы мой интерфейс выглядел одинаково на iPhone и iPad. Как на моих изображениях: [img]https://i.sstatic.net/N8V0c.jpg[/img] И я использую UICollectionCompostionLayout и этот код: [code]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
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 } [/code] Я получаю примерно тот результат, который хочу. Но меня беспокоит мой код. Я делаю слишком много странных вычислений, чтобы мой интерфейс выглядел одинаково на iPhone и iPad. Также я делаю разные вычисления для iPhone и iPad, хотя UICollectionCompostionLayout был создан специально для минимума вычислений, но интерфейсы выглядели одинаково на разных устройствах. Что мне следует исправить в своем коде?
Я разрабатываю приложение .NET MAUI для Android/iOS и только начал работать над iOS.
Я работаю в Windows на Visual Studio в сочетании с MacBook, чтобы иметь доступ к симуляторам iOS.
Моя команда участвует в программе разработчиков Apple, и у меня...
Я хочу изменить высоту элемента раздела и отцентрировать его. Но когда я пытаюсь изменить высоту, я не могу изменить положение Y в своем разделе. Я хочу сделать это: