我有tabView,在每个标签中显示列表.当我在一个选项卡中滚动时,切换到另一个选项卡并返回到上一个选项卡,位置返回到顶部而不是显示上一个滚动位置.我该如何实现这一目标?需要知道如何使用onSaveInstanceState和onRestoreInstanceState来保存位置并使用保存的位置来显示上一个滚动位置.
提前致谢.
谢谢大家的回复.我尝试了所有的解决方案,但遇到了其他问题.基本上我面临的问题如下.
当我启动我的应用程序时,我有一个listview作为我的第一个活动.当我单击列表项时,它会启动包含3个选项卡的选项卡活动.所有3个选项卡都使用名为ListActivity的相同活动.但是3个标签包含不同的数据.我的问题是当我在选项卡之间切换时如何保留列表的位置.通过提供上述解决方案,当我在一个选项卡中更改位置时,它也会影响其余选项卡.例如,如果我在第一个选项卡中的位置6,则此位置将设置为第二个和第三个选项卡,以及我对所有3个选项卡使用相同的ListActivity.我不被允许分享代码.所以必须这么长时间输入问题.创建的选项卡数量也是动态的.它可能是3或4或5.但是所有选项卡都使用1个ListActivity.
任何人都可以给我一个如何实现这一目标的例子.1.单个ListActivity在多个选项卡中使用.2.在影响其他选项卡后,将光标位置保留在选项卡中.
您的解决方案表示赞赏.提前致谢.
我正在使用 SwiftUI 开发 Swift 应用程序。
我有这样的设置,我将 TabView 放入 NavigationView 中,并在 tabView 上使用 navigationBarTitle。我这样做是因为如果我将 NavigationView 放入 TabView 中,当我转到 NavigationLink 时,我无法使 Tab 栏消失:目前看来对于 swiftUI 来说这是不可能的。
我的设置当前的问题是,由于我将 .navigationBarTitle 放在 TabView 上,因此当我更改选项卡视图时标题不会更改,并且由于某种原因无法重置子视图上的 .navigationBarTitle。
这是一个代码来解释我所说的:
内容视图:
NavigationView {
TabView {
SomeSubView().tabItem() { Text("SomeSubView") }
Text("dummy2").tabItem() { Text("dummy2") }
Text("dummy3").tabItem() { Text("dummy3") }
}.navigationBarTitle("hello")
}
Run Code Online (Sandbox Code Playgroud)
一些子视图:
List(somearray) { element in
NavigationLink(destination: elementDetails()) {
SomeRowView()
}
}
Run Code Online (Sandbox Code Playgroud)
这是预览(上面的代码不完全是我的代码,只是一个示例):
现在我想将 .navigationBarTitle 放入 SomeSubView() 中,如下所示:
List(somearray) { element in
NavigationLink(destination: elementDetails()) {
SomeRowView()
}
}.navigationBarTitle("title2")
Run Code Online (Sandbox Code Playgroud)
而不是为 …
我正在尝试使用 Flutter 和GetX构建一个用于状态管理的应用程序,在我的一个页面中,我需要在页面中间构建一个 TabView 小部件,我已经找到了很多解释如何构建 TabView 的内容小部件,如这篇文章和这篇文章,但所有这些都扩展了一个带有SingleTickerProviderStateMixin的状态控制器。
据我了解阅读文档,我不应该像那样使用 StatefulWidgets 和状态,但我无法弄清楚如何使用 GetX 架构来制定解决方案。
我已经在我的页面中尝试过:
class CourseDetailPage extends StatelessWidget {
final TabController _tabController = Get.put(TabController(vsync: null, length: 2));
}
Run Code Online (Sandbox Code Playgroud)
和
class CourseDetailPage extends StatelessWidget {
final TabController _tabController = TabController(vsync: null, length: 2);
}
Run Code Online (Sandbox Code Playgroud)
但是 TabController 的 VSYNC 参数不能为空,我不知道我如何无法获得 TickerProvider 来填充它。
正如您从屏幕截图中看到的,“语言”选项卡出现了两次。
我有以下 HostingTabBar 代码,该代码在应用程序启动时调用:
struct HostingTabBar: View {
private enum Tab: Hashable {
case language
case canvas
case homework
case test
case more
}
@State private var selectedTab: Tab = .language
var body: some View {
TabView(selection: $selectedTab) {
LanguageView()
.tag(0)
.tabItem {
Text("Language")
Image("language")
}
CanvasView()
.tag(1)
.tabItem {
Text("Canvas")
Image("canvas")
}
HomeworkView()
.tag(2)
.tabItem {
Text("Homework")
Image("homework")
}
TestView()
.tag(3)
.tabItem {
Text("Test")
Image("test")
}
MoreView()
.tag(4)
.tabItem {
Text("More")
Image("more")
}
}
.accentColor(nil)
}
}
struct HostingTabBar_Previews: …Run Code Online (Sandbox Code Playgroud) 我正在处理 SwiftUI 中的一个简单按钮,布局如下:
TabView {
ForEach(...) { ...
Button {...}
label {...}
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击(但不释放)按钮时,它会默认突出显示该按钮;这可以。但是,如果我将这些按钮排列在分页选项卡视图中,则通过滑动来导航页面会突出显示这些按钮,这是我不想要的。
有没有办法禁用这个突出显示?最好,我想在点击按钮时保留突出显示,但在滑动时不保留突出显示,但如果我必须完全禁用它也没关系。
当我们滚动浏览器视图时,我正在尝试更改选项卡。
我已经在单个回收商视图中列出了这些项目。
因此,当我到达每个部分的标题(例如早餐然后早餐标签应该处于活动状态)时,如何相应地更改标签?
上面的 gif 解释了我的查询。请建议我一个解决方案。
如何将项目设置为禁用(不可点击)但在我的 tabView 中可见?
TabView(selection: $selectedTab) {
Settings()
.tabItem {
Image(systemName: "gearshape.fill")
Text("Settings")
}.tag(1)
.disabled(true) // Not Working
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个双向 TabView (带有.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))),其数据源会随着时间的推移而改变。
下面的代码描述了预期的结果:
class TabsViewModel: ObservableObject {
@Published var items = [-2, -1, 0, 1, 2]
@Published var selectedItem = 2 {
didSet {
if let index = items.firstIndex(of: selectedItem), index >= items.count - 2 {
items = items + [items.last! + 1]
items.removeFirst()
}
if let index = items.firstIndex(of: selectedItem), index <= 1 {
items = [items.first! - 1] + items
items.removeLast()
}
}
}
}
struct TabsView: View {
@StateObject var vm = TabsViewModel() …Run Code Online (Sandbox Code Playgroud) 我正在通过 TabView 创建一个垂直分页视图
一切都很完美,除了奇怪的右边距,如下图所示。
这是我使用的代码。如果有人能指出根本原因,我将不胜感激。
import SwiftUI
fileprivate struct VCompatibleTabView<Content: View>: View {
let proxy: GeometryProxy
let content: Content
init(proxy: GeometryProxy, @ViewBuilder content: () -> Content) {
self.proxy = proxy
self.content = content()
}
var body: some View {
if #available(iOS 15.0, *) {
// Credit to Gary Tokmen for this bit of Geometry Reader code: https://blog.prototypr.io/how-to-vertical-paging-in-swiftui-f0e4afa739ba
TabView {
content
.rotationEffect(.degrees(-90)) // Rotate content
.frame(
width: proxy.size.width,
height: proxy.size.height
)
}
.frame(
width: proxy.size.height, // Height & width swap …Run Code Online (Sandbox Code Playgroud)