Показывать частичный предыдущий и следующий элемент в PageTabViewStyle (SwiftUI 2.0) или PageViewController/PageView (с IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Показывать частичный предыдущий и следующий элемент в PageTabViewStyle (SwiftUI 2.0) или PageViewController/PageView (с

Сообщение Anonymous »

Я работаю со SwiftUI 2.0 и на самом деле я рад, что Apple представила PageTabViewStyle для простого создания пейджера.
Но, к сожалению, я не могу реализовать его так, как хотелось бы.
Можно ли создать пейджер (PageTabViewStyle), который показывает небольшой фрагмент предыдущего и следующего элемента?


Рисунок 1: Желаемое поведение
Изображение


Я пробовал это с новым PageTabViewStyle и некоторыми комбинациями отступов и/или смещений, а также пытался взаимодействовать с UIKit (PageView/PageViewController/PAgeViewControl).
Но такое же поведение здесь, я вижу только выбранный элемент, даже если он не покрывает всю ширину.


Рисунок 2: Текущее поведение< /strong>
Изображение

< /p>
SwiftUI 2.0 — Интеграция PageTabViewStyle

Следующий фрагмент кода представляет собой очень простую реализацию PageTabViewStyle, но если у вас есть идеи, вы можете показать мне на этом примере, что я могу сделать, чтобы это сделать. работа:

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

import SwiftUI

struct ContentView: View {

let colors: [Color] = [.red, .green, .yellow, .blue]

var body: some View {

TabView {
ForEach(0.. Coordinator {
Coordinator(self)
}

func makeUIViewController(context: Context) -> UIPageViewController {
let pageViewController = UIPageViewController(
transitionStyle: .scroll,
navigationOrientation: .horizontal,
options: [UIPageViewController.OptionsKey.interPageSpacing: 5]
)
pageViewController.dataSource = context.coordinator
pageViewController.delegate = context.coordinator

return pageViewController
}

func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
pageViewController.setViewControllers(
[controllers[currentPage]], direction: .forward, animated: true)
}

class Coordinator: NSObject, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var parent: PageViewController

init(_ pageViewController: PageViewController) {
self.parent = pageViewController
}

func pageViewController(
_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let index = parent.controllers.firstIndex(of: viewController) else {
return nil
}
if index == 0 {
return parent.controllers.last
}
return parent.controllers[index - 1]
}

func pageViewController(
_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) ->  UIViewController? {
guard let index = parent.controllers.firstIndex(of: viewController) else {
return nil
}
if index + 1 == parent.controllers.count {
return parent.controllers.first
}
return parent.controllers[index + 1]
}

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if completed,
let visibleViewController = pageViewController.viewControllers?.first,
let index = parent.controllers.firstIndex(of: visibleViewController) {
parent.currentPage = index
}
}
}
}
Просмотр страницы

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

/*
See LICENSE folder for this sample’s licensing information.

Abstract:
A view for bridging a UIPageViewController.
*/

import SwiftUI

struct PageView
: View {
var viewControllers: [UIHostingController]
@State var currentPage = 0

init(_ views: [Page]) {
self.viewControllers = views.map { UIHostingController(rootView: $0) }
}

var body: some View {
ZStack(alignment: .bottomTrailing) {
PageViewController(controllers: viewControllers, currentPage: $currentPage)
PageControl(numberOfPages: viewControllers.count, currentPage: $currentPage)
.padding(.trailing)

}
}
}
Спасибо,
Себастьян


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Темп-> следующий = PTR; темп->следующий->предыдущий = PTR; скажите, пожалуйста, что говорит этот код при вставке узла в
    Anonymous » » в форуме JAVA
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Темп-> следующий = PTR; темп->следующий->предыдущий = PTR; скажите, пожалуйста, что говорит этот код при вставке узла в
    Anonymous » » в форуме C++
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • ScrollView просматривает предыдущий/следующий элемент в SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • SwiftUI TabView PageTabViewStyle предотвращает смену вкладки?
    Anonymous » » в форуме IOS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Swiftui tabview pagetabviewstyle предотвратить вкладку «Изменение»?
    Anonymous » » в форуме IOS
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

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