如何在 SwiftUI 中反转列表
How to make List reversed in SwiftUI
我是 SwiftUI 的新手,正在尝试在 Android LinearLayoutManager
中制作类似 reverse
的内容
messagesRecyclerView = view.findViewById(R.id.messagesRecyclerView);
manager = new LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, true); // => true means reverse layout
messagesRecyclerView.setLayoutManager(manager);
在这种情况下,一切都是从下到上。
我能找到的所有有用的东西都是 tableview
反向:
//In ViewDidLoad
conversationTableView.transform = CGAffineTransform(rotationAngle: -(CGFloat)(Double.pi));
//In cellForRowAtIndexPath
cell.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));
但我不知道如何将它添加到 List
(似乎它只是 TableView 的包装器)。
这里的另一种方法:
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 以编程方式在列表 中滚动吗?
希望我没有重复任何问题。
将其用于匿名聊天应用 https://en.lonje.com/
UITableView
上有一个技巧,您可以翻转 table 和每个单元格。所以它似乎是从底部填充的。您也可以在 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)
}
}
}
}
@cipais 的回答很有效。
List(chatController.messages, id: \.self) { message in
MessageView(message.text, message.isMe)
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
我是 SwiftUI 的新手,正在尝试在 Android LinearLayoutManager
reverse
的内容
messagesRecyclerView = view.findViewById(R.id.messagesRecyclerView);
manager = new LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, true); // => true means reverse layout
messagesRecyclerView.setLayoutManager(manager);
在这种情况下,一切都是从下到上。
我能找到的所有有用的东西都是 tableview
反向:
//In ViewDidLoad
conversationTableView.transform = CGAffineTransform(rotationAngle: -(CGFloat)(Double.pi));
//In cellForRowAtIndexPath
cell.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));
但我不知道如何将它添加到 List
(似乎它只是 TableView 的包装器)。
这里的另一种方法:
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 以编程方式在列表 中滚动吗?
希望我没有重复任何问题。
将其用于匿名聊天应用 https://en.lonje.com/
UITableView
上有一个技巧,您可以翻转 table 和每个单元格。所以它似乎是从底部填充的。您也可以在 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)
}
}
}
}
@cipais 的回答很有效。
List(chatController.messages, id: \.self) { message in
MessageView(message.text, message.isMe)
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)