我有一个HomeView
NavigationView {
ZStack {
VStack {
NavigationLink(destination: ProfileView()) {
if session.userInSession?.activated != 1 {
completionText(message: "Complete Your Profile")
} else {
completionText(message: "Edit Your Profile")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的ProfileView没有包含在导航视图中,也没有栏标题:
VStack {
ScrollView(showsIndicators: false) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但我的ProfileView也可以从我的访问SettingView
NavigationView {
VStack(alignment: .leading) {
List {
NavigationLink(destination: ProfileView()) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我ProfileView从设置屏幕访问我的时,它显示正常。但是当我从我的访问它时,HomeView它会在顶部创建空白:
当我通过“设置”时,效果很好:
如何删除上面的空白?
我们正在推动SwiftUI嵌入在土地中的视图,UIHostingViewController如下UIKit所示:
首先制作UIViewController:
func hostingController() -> UIViewController {
let swiftUIView = swiftUIView(viewModel: viewModel(data: [Data, Data, Data]))
return UIHostingController(rootView: swiftUIView)
}
Run Code Online (Sandbox Code Playgroud)
然后将其压入UINavigationView堆栈:
[self.navigationController pushViewController:hostingViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
这让我们进入了SwiftUI环境。但是,如果我们的SwiftUI环境有自己的带有NavigationView和的导航堆栈NavigationLink,则原始navigationBar的后退按钮只能导航回原始呈现UIViewController。
有没有办法将SwiftUI嵌入的视图推NavigationView送到现有UINavigationController堆栈上?
到目前为止,我们唯一的想法是UIHostingViewController为每个新SwiftUI屏幕创建一个新屏幕,并通过某种委托方法将其推送到堆栈上。
我们正在寻找的是这样的:
UINavigationStack: [UIViewController -> UIViewController -> SwiftUIView -> SwiftUIView]
Run Code Online (Sandbox Code Playgroud)
中的后退<箭头navigationBar将按预期运行。
如果我们可以进一步澄清,请告诉我们!
uinavigationcontroller swift swiftui swiftui-navigationlink swiftui-navigationview
我用来NavigationLink在NavigationView. 如何从导航堆栈中删除屏幕?不仅隐藏导航“后退”按钮,还从堆栈中完全删除屏幕?
例如,我有这样的屏幕链:A -> B -> C
如何删除屏幕B以返回C到A?
或者,另一个例子,如何删除 screenA和B,这样Cscreen 将成为根?
或者说这一切在 SwiftUI 的构想中都是不可能实现的?
我试图NavigationLink从屏幕底部加载视图,而不是从右侧转换,但“明显”的方法(使用 a .transition(.move(edge: .bottom)))似乎没有任何效果。
下面是里面的NavigationView:
List {
ForEach(self.message, id: \.self) { message in
HStack(alignment: .center) {
MessageListCell(....)
}
}
}
Run Code Online (Sandbox Code Playgroud)
和MessageListCell:
var body: some View {
HStack {
VStack(alignment: .leading, spacing: 0) {
Text(person.firstName).lineLimit(1)
.foregroundColor(.main)
}
Spacer()
NavigationLink(destination: MessageDetail(otherPerson: otherPerson,
subject: subject,
profileHandler: { ProfileReducer($0) })
.transition(.move(edge: .bottom)),
tag: 1, selection: $action) {
NextButton("Proceed")
}
}
}
Run Code Online (Sandbox Code Playgroud)
NextButton从屏幕右侧而不是底部点击一致的过渡。我已经尝试过上述方法的变体,但我开始认为这transition可能不是正确的方法。
我有一个里面有 NavigationLink 的列表。当我点击一行时,它会突出显示。连接到用户界面样式(在 info.plist 中)的颜色,可以是深色或浅色。如何更改此突出显示的颜色?我在这里用“EpmtyView()”和“.buttonStyle()”做出了一些决定,但它们在我的情况下不起作用。使用自定义按钮样式,仅突出显示单元格的内容(例如文本),而不突出显示单元格本身。我认为问题与“selectionStyle”有关,导致“UITableViewCell.appearance().selectionStyle = .none”删除此突出显示。
struct ContentView: View {
var myArray = ["one", "two", "three"]
init() {
UITableView.appearance().backgroundColor = UIColor.clear
}
var body: some View {
NavigationView {
VStack {
List {
ForEach(self.myArray, id: \.self) { text in
NavigationLink(destination: DestinationView()) {
MyRow(text: text)
}
.listRowBackground(Color.black)
}
}.listStyle(GroupedListStyle())
}.background(Color.black)
}
}
}
Run Code Online (Sandbox Code Playgroud)
extension UINavigationController {
override open func viewDidLoad() {
super.viewDidLoad()
let standartAppearance = UINavigationBarAppearance()
standartAppearance.backgroundColor = UIColor.black
navigationBar.standardAppearance = standartAppearance
navigationBar.scrollEdgeAppearance = standartAppearance
navigationBar.compactAppearance = standartAppearance
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 SwiftUI 中实现编程视图弹出的逻辑
我在项目上设置了一个标签并为所选项目创建了一个相应的变量,但是当我单击 DetaiView 屏幕上的按钮时,没有任何反应。
如果我使用 VStack 而不是 List 或使用presentationMode环境变量来释放屏幕,问题就会消失,但我想使用List。
代码:
struct ContentView: View {
@State var data: [Int] = [1, 2, 3, 4, 5]
@State var selectedItem: Int? = nil
var body: some View {
NavigationView {
// NavigationLink( // This make dismiss work
// destination: DetailView(selectedItem: $selectedItem),
// tag: 123,
// selection: $selectedItem,
// label: { Text("\(123)") }
// )
List { // VStack here make dismiss work
ForEach(data, id: \.self) { element in
NavigationLink(
destination: DetailView(selectedItem: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 SwiftUI 中的列表或 ForEach 循环中执行 NavigationLink。不幸的是,我得到了一个非常奇怪的行为(例如,当点击 Leo 时它会打开 Karl,Opening Max 也指向 Karl)。
我已经发现它与 NavigationLink 中的“isActive”属性有关。不幸的是,我需要它在此处实现此行为:https : //i.stack.imgur.com/g0BFz.gif此处也询问SwiftUI - Nested NavigationView: Go back to root。
我还尝试使用选择和标签属性,但我无法实现“返回根目录”机制。
这是示例:
import SwiftUI
struct Model: Equatable, Hashable {
var userId: String
var firstName: String
var lastName: String
}
struct ContentView: View {
@State var navigationViewIsActive: Bool = false
var myModelArray: [Model] = [
Model(userId: "27e880a9-54c5-4da1-afff-05b4584b1d2f", firstName: "Leo", lastName: "Test"),
Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Max", lastName: "Test"),
Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Karl", lastName: "Test")] …Run Code Online (Sandbox Code Playgroud) 控制台错误: SwiftUI 在推送导航链接时遇到问题。请提交错误。
NavigationLink 中不使用 isActive 参数是没有问题的。但是,我必须使用 isActive 参数。因为我相应地关闭了下拉列表。
菜单型号:
struct Menu: Identifiable {
var id: Int
var pageName: String
var icon: String
var page: Any
var startDelay: Double
var endDelay: Double
// var offsetY: CGFloat
}
let menu = [
Menu(id: 1, pageName: "Profil", icon: "person.crop.circle", page: ProfileView(), startDelay: 0.2, endDelay: 0.6),
Menu(id: 2, pageName: "Sepet", icon: "cart", page: CartView(), startDelay: 0.4, endDelay: 0.4),
Menu(id: 3, pageName: "?stek", icon: "plus.circle", page: ClaimView(), startDelay: 0.6, endDelay: 0.2)
]
Run Code Online (Sandbox Code Playgroud)
菜单视图
struct …Run Code Online (Sandbox Code Playgroud) VideoPlayer当我将view 放入NavigationView的父视图或子视图中时,就会出现问题。在此示例中,子视图将显示导航栏:
struct ParentView: View {
var body: some View {
NavigationView {
VStack {
Text("Parent View")
NavigationLink(destination: ChildView().navigationBarHidden(true)) {
Text("Child View")
}
}
.navigationBarHidden(true)
}
}
}
struct ChildView: View {
var body: some View {
VStack {
Text("Child View")
VideoPlayer(player: AVPlayer())
}
}
}
Run Code Online (Sandbox Code Playgroud) navigationbar avkit navigationview swiftui swiftui-navigationlink
watchOS 的最低限度选择器测试应用程序。
import SwiftUI
@main
struct PickerTestApp: App {
var body: some Scene {
WindowGroup {
NavigationView {
ContentView()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
内容视图
import SwiftUI
struct ContentView: View {
var body: some View {
VStack{
NavigationLink(destination: DistanceSelectView()) {
Text("Next screen")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
距离选择视图
import SwiftUI
struct DistanceSelectView: View {
@State var Age = 1
var body: some View {
VStack {
Picker(selection: $Age, label: Text("Select your age.[\(Age)]")) {
ForEach(10 ..< 100, id: \.self) { num in
Text("\(num)") …Run Code Online (Sandbox Code Playgroud)