标签: tabview

Flutter tabview 刷新问题

我的 main.dart 中有一个 TabBarView,每个选项卡都有一个类来显示内容(它是 listview 对象),当我在选项卡之间切换时,listview 页面每次都会刷新,tabbarview 是否正常?我不希望每次在标签之间切换时它都会刷新。

是我班级的问题吗?如何解决这个问题?代码是这样的。

    class ListWidget extends StatefulWidget {
  final catID;

  ListWidget(this.catID);


  _ListWidgetState createState() => new _ListWidgetState(catID);
}

class _ListWidgetState extends State<ListWidget> {

  var catID;

  void initState() {
    super.initState();
    _fetchListData();
  }

  @override

  Widget build(BuildContext context) {
    // TODO: implement build

    return new Scaffold(.......
}
Run Code Online (Sandbox Code Playgroud)

tabs tabview dart flutter

7
推荐指数
2
解决办法
1万
查看次数

当@State var 更改时,带有“PageTabViewStyle”的 TabView 不会更新其内容

我在 SwiftUI 中遇到了一个奇怪的问题。我创建了一个简单的 View,它只包含一个 Button 和一个使用 PageViewStyle 的 TabView。TabView 似乎没有根据变量的状态正确更新其内容。似乎内容以某种方式更新,但视图不会像我期望的那样更新

这是我的视图代码:

struct ContentView: View {
    @State var numberOfPages: Int = 0
    @State var selectedIndex = 0
    
    var body: some View {
        VStack {
            Text("Tap Me").onTapGesture(count: 1, perform: {
                self.numberOfPages = [2,5,10,15].randomElement()!
                self.selectedIndex = 0
            })
            
            TabView(selection: $selectedIndex){
                ForEach(0..<numberOfPages, id: \.self) { index in
                    Text("\(index)").background(Color.red)
                }
            }
            .frame(height: 300)
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
        }.background(Color.blue)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是多次点击标签后的结果。初始状态不是 0 页。在您点击后,我希望 TabView 的内容发生变化,因此所有页面都将是可滚动和可见的,但由于某种原因,只有页面指示器会更新它的状态。

在此处输入图片说明

tabview swiftui

7
推荐指数
1
解决办法
2344
查看次数

TabView 选择重置为工作表演示文稿上的第一个选项卡

更新:

感谢 Harshil 和 Sumit 指出我太愚蠢了,没有意识到我正在使用id()而不是tag(). 如果说你能从这个问题中学到什么,那就是:

当你独自完成一个项目时,你往往会变得盲目。你看不到自己的错误。进行代码审查。请朋友和同事查看一下。这是个好主意。;)

原问题:

在我的 SwiftUI 项目中,我使用BindingTabView$selection以编程方式切换选项卡。

问题是:例如,当我在上呈现工作表时,TabView选择中包含的第二个视图将重置为第一个选项卡。

对我来说,这似乎是一个SwiftUI 错误- 但有解决方法吗?

下面您可以找到一个演示该行为的工作示例。(使用Xcode 12.4测试)

如何测试:转到第二个选项卡,点击“二”按钮,您将看到返回到第一个选项卡。一旦您selection从 TabView 中删除该属性,这种情况就不会再发生。

奥兰多干杯

enum TabPosition: Hashable {
    case one
    case two
    case three
}

struct RootView: View {
    
    @State private var selection: TabPosition = .one
    
    var body: some View {
        TabView(selection: $selection) {
            One()
                .tabItem { Label("One", systemImage: "1.circle") }
                .id(TabPosition.one) …
Run Code Online (Sandbox Code Playgroud)

ios tabview swift swiftui

7
推荐指数
1
解决办法
1602
查看次数

如何在 SwiftUI 中将呈现视图关闭到选项卡视图的根视图?

TabView在我的主页上使用。假设我有 4 个选项卡。在第二个选项卡上,我可以使用 转到另一个视图NavigationLink,并使用 转到另外 2 个视图NavigationLink。然后在最新的视图上,有一个用于呈现视图的按钮,我使用它.fullScreenCover(因为我想全屏呈现它)。

在呈现视图中,我X在要关闭的左侧添加了一个标记navigationBarItems。我使用@Environment(\.presentationMode) var presentationModepresentationMode.wrappedValue.dismiss()来驳回。但它只会将当前视图忽略到前一个视图,而实际上我想将它忽略到我的视图的根目录,即我的TabView.

有没有办法做到这一点?因为我查阅了一些文章,但没有任何相关的内容,特别是在TabView上下文中。

我也有一个问题:

  1. 这是正确的使用方法吗.fullScreenCover?或者是否有另一种可能的解决方案,例如呈现全屏样式的模式(如果有任何原因我也不确定)。

任何建议将不胜感激,提前谢谢。

dismiss ios tabview swiftui modal-sheet

7
推荐指数
1
解决办法
4084
查看次数

当 TabView 内的 NavigationView 时 SwiftUI onAppear 调用两次

所以我有一个 TabView,其中每个选项卡都嵌入在 NavigationView 中。在每个选项卡第一次出现时,我都会收到以下生命周期调用 onAppear()、onDisappear()、onAppear()。所以看起来 onAppear 被调用了两次。这只会发生第一次。如果我导航回同一个选项卡,则只会调用 onAppear(),而且只会调用一次。

这是一个最小的例子:

struct Page1: View {
    init() { print("Page 1 init") }
    
    var body: some View {
        NavigationView {
            Text("Page 1")
                .onAppear(perform: { print("Page 1 appearing") })
                .onDisappear(perform: { print("Page 1 disappearing") })
        }
    }
}

struct Page2: View {
    init() { print("Page 2 init") }
    
    var body: some View {
        NavigationView {
            Text("Page 2")
                .onAppear(perform: { print("Page 2 appearing") })
                .onDisappear(perform: { print("Page 2 disappearing") })
        }
    }
}

struct ContentView: View …
Run Code Online (Sandbox Code Playgroud)

tabview navigationview swiftui onappear

7
推荐指数
1
解决办法
2324
查看次数

SwiftUI - 在保持 TabView 可滑动的同时检测长按

我正在尝试检测可滑动的 TabView 上的长按手势。

问题是它目前禁用了 TabView 的可滑动行为。在单个 VStack 上应用手势也不起作用 - 如果我点击背景,则不会检测到长按。

这是我的代码的简化版本 - 它可以复制粘贴到 Swift Playground 中:

import SwiftUI
import PlaygroundSupport

struct ContentView: View {
    @State var currentSlideIndex: Int = 0
    @GestureState var isPaused: Bool = false
    
    var body: some View {
        
        let tap = LongPressGesture(minimumDuration: 0.5,
                                   maximumDistance: 10)
            .updating($isPaused) { value, state, transaction in
                state = value
            }
        
        Text(isPaused ? "Paused" : "Not Paused")
        TabView(selection: $currentSlideIndex) {
            VStack {
                Text("Slide 1")
                Button(action: { print("Slide 1 Button Tapped")}, label: {
                    Text("Button …
Run Code Online (Sandbox Code Playgroud)

gesture tabview swift swiftui swiftui-tabview

7
推荐指数
1
解决办法
212
查看次数

SwiftUI 2.0 TabView 禁用滑动以更改页面

我有一个使用 swiftUI 2.0 PageTabViewStyle 的 TabView。有什么方法可以禁用滑动以更改页面?

我的第一个选项卡视图中有一个搜索栏,但是如果用户正在键入,我不想提供更改它们的功能,我基本上希望它被锁定在该屏幕上,直到所述功能完成。

这是一个显示差异的 gif,我希望在 gif 全屏时禁用选项卡更改。 https://imgur.com/GrqcGCI

xcode tabview swiftui

6
推荐指数
4
解决办法
3336
查看次数

如何使用 Flutter GetX 构建 TabView

我正在尝试使用 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 来填充它。

tabview flutter flutter-layout flutter-get

6
推荐指数
1
解决办法
5498
查看次数

为什么 SwiftUI 的 TabView 旋转到横向会跳转到随机选项卡编号?

使用 Swift 5.3.2、Xcode 12.4、iOS 14.4、

我正在尝试在 SwiftUI 中制作一个简单的 Page-TabView (参见下面的代码摘录)。

当旋转到横向或返回纵向时,出现问题(参见视频):

每当我旋转 iPhone 时,TabView 都会“跳转”到随机选项卡编号。

为什么是这样 ?

我该怎么做才能使 TabView 在旋转时保持当前选项卡号?

(我使用的是iPhoneX)

新的 iOS14 TabView 的 PageControl 功能似乎存在更多问题,如此处所述。(也许旋转设备时的“随机选项卡编号”与所描述的布局问题有关)

在此输入图像描述

import SwiftUI

@main
struct MyApp: App {
    
    var body: some Scene {
        WindowGroup {
            TabView {
                Text("1")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .background(Color.pink)
                Text("2")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .background(Color.yellow)
                Text("3")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .background(Color.green)
                Text("4")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .background(Color.blue)
            }
            .tabViewStyle(PageTabViewStyle())
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

landscape tabview swift

6
推荐指数
1
解决办法
1169
查看次数

SwiftUI - 禁用滑动时按钮突出显示

我正在处理 SwiftUI 中的一个简单按钮,布局如下:

TabView {
  ForEach(...) { ...
    Button {...}
      label {...}
  }
}
Run Code Online (Sandbox Code Playgroud)

当我点击(但不释放)按钮时,它会默认突出显示该按钮;这可以。但是,如果我将这些按钮排列在分页选项卡视图中,则通过滑动来导航页面会突出显示这些按钮,这是我不想要的。

有没有办法禁用这个突出显示?最好,我想在点击按钮时保留突出显示,但在滑动时不保留突出显示,但如果我必须完全禁用它也没关系。

button tabview swift swiftui

6
推荐指数
0
解决办法
159
查看次数