Как сделать Перевернутый Список в SwiftUI - PullRequest
2 голосов
/ 22 октября 2019

Я новичок в SwiftUI, пытаюсь сделать что-то вроде reverse в Android LinearLayoutManager

messagesRecyclerView = view.findViewById(R.id.messagesRecyclerView);

manager = new LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, true); // => true means reverse layout
messagesRecyclerView.setLayoutManager(manager);

, в этом случае все идет снизу вверх.

Все полезноея могу найти tableview в обратном порядке: загрузить табличное представление снизу, прокрутить вверх (обратное табличное представление) (iOS)

//In ViewDidLoad
conversationTableView.transform = CGAffineTransform(rotationAngle: -(CGFloat)(Double.pi));

//In cellForRowAtIndexPath
cell.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));

, но я не знаю, как добавить его вList (похоже, это просто оболочка вокруг TableView). Другой подход здесь: Как заполнить UITableView снизу вверх?

                List {
                    ForEach(itemsData.messages) { item in
                        ChatRow(item: item)
                    }
                    Text("Load more messages...")
                        .onAppear() {
                            print("Load more messages...")
                            self.itemsData.next()
                    }
                }

Я предполагаю, что нужно получить что-то .onAppear или override методов, чтобы это работало.

Похоже, SwiftUI слишком молод, чтобы заходить так глубоко.

Другой вопрос: есть ли у них API для программной прокрутки в Списке ?

Надеюсь, я неДублирование любых вопросов.

1 Ответ

3 голосов
/ 23 октября 2019

На UITableView есть хитрость, когда вы переворачиваете стол и каждую ячейку. Похоже, что он заполняется снизу. Вы можете сделать этот трюк и в SwiftUI:

Полностью рабочая демоверсия:

struct ContentView: View {
    @State private var ids = [String]()

    init() {
        UITableView.appearance().tableFooterView = UIView()
        UITableView.appearance().separatorStyle = .none
    }

    var body: some View {
        ZStack {
            List(ids, id: \.self) { id in
                Text(id).scaleEffect(x: 1, y: -1, anchor: .center)
            }.scaleEffect(x: 1, y: -1, anchor: .center)

            Button("Touch") {
                self.ids.append(UUID().uuidString)
            }
        }
    }
}
...