首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >返回开始屏幕会导致将视图相互堆叠起来。

返回开始屏幕会导致将视图相互堆叠起来。
EN

Stack Overflow用户
提问于 2020-07-05 03:39:34
回答 2查看 20关注 0票数 0

每次我回到开始屏幕,它似乎堆叠自己。你可以在我附上的截图中看到我的意思。我加了一些边框让你明白我的意思

开始屏幕的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct StartScreen: View {

    
    var body: some View {
        NavigationView{
            
            
            VStack() {
                
                Image("Headline").resizable().scaledToFit()
                Image("GreenMonster")
                    .resizable()
                    .scaledToFit()
                    .frame(alignment: .top)
 
                NavigationLink(destination: Game(monster: monster)) {
                    Text("Spielen")
                        .frame(width: 200, height: 50, alignment: .center)
                        .font(.title)
                        .padding()
                        .background(Color.blue)
                        .cornerRadius(40)
                        .foregroundColor(.white)
                        .padding(10)
                        .overlay(
                            RoundedRectangle(cornerRadius: 40)
                                .stroke(Color.blue, lineWidth: 5)
                    )
                    
                }.isDetailLink(false)
                
                /*
                 NavigationLink(destination: Settings()){
                 Image("Settingswheel").resizable().scaledToFit().frame(width: 50, height: 50).offset(x: 150)
                 }
                 
                 */
                
            }
            
            }.navigationBarBackButtonHidden(true).border(Color.green)
            
    }
}

回过头来的代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct DefeatedView: View {
    
    @EnvironmentObject var helper: Helper
    
    var body: some View {
        
        NavigationView(){
            VStack(){
                Text("BESIEGT!").foregroundColor(.green).font(.title).bold()
                Image(monster[0].imageURL).resizable().scaledToFit()
                NavigationLink(destination: StartScreen()){
                    Text("Zum Start").frame(width: 120, height: 6, alignment: .center)
                        .padding()
                        .background(Color.blue)
                        .cornerRadius(40)
                        .foregroundColor(.white)
                        .padding(10)
                        .overlay(
                            RoundedRectangle(cornerRadius: 40)
                                .stroke(Color.blue, lineWidth: 5)
                    )
                }
            }
        }.navigationBarBackButtonHidden(true)
        
    }
}

谢谢你的帮助,我刚加入SwiftUI

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-05 04:07:12

将此添加到DefeatedView

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

然后不再使用NavigationLink,使用一个按钮并手动将视图按回开始视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Button(action: {
    //Push navigation view back
    self.presentationMode.wrappedValue.dismiss()
})
{
    Text("Zum Start").frame(width: 120, height: 6, alignment: .center)
        .padding()
        .background(Color.blue)
        .cornerRadius(40)
        .foregroundColor(.white)
        .padding(10)
        .overlay(
            RoundedRectangle(cornerRadius: 40)
                .stroke(Color.blue, lineWidth: 5)
    )
}

编辑:

当您按两次NavigationView时,只调用一次显示模式确实会推回您的游戏视图。下面是使用ObservableObject的一个可能的解决方案。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ViewHelper : ObservableObject
{
    @Published var finishedGame : Bool = false
}

struct StartScreen: View {

    @EnvironmentObject var viewHelper : ViewHelper

    var body: some View {
    
    NavigationLink(destination: Game(), isActive: self.$viewHelper.finishedGame) {
        Text("Spielen")

然后,当游戏完成后,更改finishedGame变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct DefeatedView: View {
        
    @EnvironmentObject var viewHelper : ViewHelper

    var body: some View {
        
        NavigationView(){
            VStack(){
                Text("BESIEGT!").foregroundColor(.green).font(.title).bold()
                Button(action: {
                    self.viewHelper.finishedGame = false
                })
                {
                    Text("Zum Start").frame(width: 120, height: 6, alignment: .center)
                        .padding()
                        .background(Color.blue)
                        .cornerRadius(40)
                        .foregroundColor(.white)
                        .padding(10)
                        .overlay(
                            RoundedRectangle(cornerRadius: 40)
                                .stroke(Color.blue, lineWidth: 5)
                    )
                }
            }
        }.navigationBarBackButtonHidden(true)
票数 1
EN

Stack Overflow用户

发布于 2020-07-05 04:20:40

我在这个网站上找到了解决问题的方法:

https://thinkdiff.net/ios/swiftui-how-to-pop-to-root-view/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62740176

复制
相关文章
iOS9新特性——堆叠视图UIStackView
        随着autolayout的推广开来,更多的app开始使用自动布局的方式来构建自己的UI系统,autolayout配合storyBoard和一些第三方的框架,对于创建约束来说,已经十分方便,但是对于一些动态的线性布局的视图,我们需要手动添加的约束不仅非常多,而且如果我们需要插入或者移除其中的一些UI元素的时候,我们又要做大量的修改约束的工作,UIStackView正好可以解决这样的问题。
珲少
2018/08/15
2.1K0
iOS9新特性——堆叠视图UIStackView
SpringMVC返回数据到视图
在SpringMVC中有一个ModelAndView对象,如其名,Model代表模型,View代表视图,这个名字就很好地解释了该类的作用——它用来存储模型数据以及显示该数据的视图名称。在控制器中调用完模型层处理完用户的请求后,我们可以把结果数据存储在该对象的model属性中,把要返回的视图信息存储在该对象的view属性中,然后让把ModelAndView对象返回给SpringMVC框架。框架则会通过调用Spring配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据传递到指定的视图上,这样我们就可以在视图中获得结果数据并显示出来了。
端碗吹水
2020/09/23
1K0
SpringMVC返回数据到视图
flutter 键盘弹出 导致超出屏幕
登录注册页面,表单内容,采用colnum的方式,调起键盘后报错,超过屏幕 return Scaffold( appBar: AppBar( elevation: 0.0, title: new Text("登陆"), ), resizeToAvoidBottomPadding: false, //输入框抵住键盘 );
sinnoo
2020/11/13
1.3K0
NOW()会返回时区信息
执行NOW()函数获取当前时间时,可以获得日期和服务器所在的时区。很多服务器运行在UTC/GMT,如果用户也使用UTC/TMT,一切都会正常,但是一旦出现时区不匹配(无论是用户程序还是数据库服务或者其他方面),就会出错。因此需要指定。
yzsDBA
2021/01/05
1K0
SpringMVC返回视图常见的 5 种方式,你会几种?| SpringMVC系列第7篇
当 http 请求被自定义的 controller 处理时,如何指定响应的页面呢?
路人甲Java
2021/07/23
3.4K0
【windows屏幕扩展】把你多余屏幕利用起来,spacedesk屏幕扩展超低延迟解决方案[通俗易懂]
spacedesk是一款基于TCP/IP协议的屏幕扩展工具,通过这款工具你可以把自己身边的闲置的平板手机或者笔记本利用起来,扩展你的屏幕。只要你的两台设备处于同一个网络环境下(只要互相能够ping通),你就可以实现屏幕扩展(卡不卡我就不知道了)。
全栈程序员站长
2022/09/21
4.1K0
【windows屏幕扩展】把你多余屏幕利用起来,spacedesk屏幕扩展超低延迟解决方案[通俗易懂]
屏幕宽高不够,滚动视图ScrollView来凑
前面几期学习了ProgressBar系列组件、ViewAnimator系列组件、Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件。 一、ScrollView概述 从前面的学习有的同学可能已经发现,当拥有很多内容时屏幕显示不完,显示不全的部分完全看不见。但是在实际项目里面,很多内容都不止一个屏幕宽度或高度,那怎么办呢?那就需要本节学习的ScrollView来完成。 在默认情况下,ScrollView只是为其他组件添加垂直滚动条,如果应用需要添加水平滚动条,则可
分享达人秀
2018/02/05
3.1K0
屏幕宽高不够,滚动视图ScrollView来凑
将iMessage发往Android将导致短信丢失
iMessage 是 Apple 在2011年发布的一向信息技术,使得 IOS 用户间能够通过互联网传送信息,而无需向运营商支付短信费用。iMessage 最初搭载于 IOS 5,随后被推广至 iPad 以及 Mac电脑。iMessage 已与系统深度整合,当用户发送信息时,iMessage将自动判断联系人是否激活了 iMessage 并自动切换。通过 iMessage 渠道发送的信息将显示为蓝色底色,而传统信息则为绿色。
reizhi
2022/09/26
1K0
将iMessage发往Android将导致短信丢失
访问权限导致toString返回空BUG分享
这个BUG偶然间发现的,因为之前一直都是用Groovy去写脚本(Groovy默认访问权限是public)。在某一个使用Java写脚本的时候突然发现,我将创建好的对象toString之后竟然是空的,无论是打印对象属性还是非空验证都是通过的。但是通过fastjson的toString方法之后就变成了空。
FunTester
2020/10/19
4390
CentOS接显示器导致屏幕显示倾斜
今天在调一台DELL老的CentOS6.5服务器时候,接上显示器发现屏幕直接完全斜了,根本看不清字体。
保持热爱奔赴山海
2019/09/18
1.4K0
CentOS接显示器导致屏幕显示倾斜
从库mysqldump会导致复制中断
ERROR NO 是1756,而且只是 Slave_SQL_Running 停了。
老叶茶馆
2020/08/31
1.6K0
DRF类视图让你的代码DRY起来
刚开始写views.py模块的代码,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don't Repeat Yourself)设计原则:
dongfanger
2020/12/22
5570
DRF类视图让你的代码DRY起来
将手机屏幕投屏到Kali
首先开启手机的开发者模式--USB试调 通过USB连接电脑后,终端执行命令scrcpy即可
逍遥子大表哥
2021/12/19
1.3K0
将手机屏幕投屏到Kali
哪些因素会导致慢查询?
不管是开发同学还是DBA,想必大家都遇到慢查询(select,update,insert,delete 语句慢),影响业务稳定性。这里说的慢,有两个含义一是比正常的慢,有可能正常执行时间是10ms,异常的是100ms 。二是sql执行时间超过设置的慢查询标准比如500ms。
用户1278550
2019/06/03
1.3K0
为什么Handler会导致内存泄漏?
最近在思考关于内存泄露的问题,进而想到了关于我们最常见和熟知的Handler在Activity内导致的内存泄漏的问题,这个问题相信作为开发都是很熟悉的,但是这背后更多的细节和导致泄漏的不同的情况,可能很多人就没有那么了解和清楚了,因此这次和大家分享一下什么情况下会导致内存泄漏,以及内存泄漏背后的故事。
没关系再继续努力
2021/11/22
1.3K0
malloc(0)时程序会返回什么?
这个问题看起来十分刁钻,不过稍有常识的人都知道,制定 C 标准的那帮语言律师也不是吃白饭的,对这种奇奇怪怪的问题一定会有定义。翻阅C17 标准 草案 N2176,在 7.22.3 节里,有如下说法:
嵌入式与Linux那些事
2021/10/14
1.5K0
typeof运算对于null会返回“Object"
您也许会问,为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
阮键
2019/08/07
2.2K0
Android 设置Dialog点击返回键及屏幕不消失
只需在dialog的show方法前调用 setCanceledOnTouchOutside setCancelable 这两个方法即可 并设置参数为false 代码如下:
longzeqiu
2019/08/14
1.9K0
点击加载更多

相似问题

PHP方法相互引用会导致PHP返回"No Data“

40

将模型返回视图会导致页面与encType断开

14

碎片相互堆叠

329

使本机Flexbox堆叠视图相互影响

10

将视图添加到现有视图后面的相对布局会导致屏幕闪烁

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文