首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift 3 NavigationController segue back导致wkwebview移动到错误位置

Swift 3是一种编程语言,用于开发iOS、macOS、watchOS和tvOS应用程序。NavigationController是iOS开发中的一个视图控制器容器,用于管理多个视图控制器的导航层次结构。Segue是视图控制器之间的一种跳转方式,可以通过代码或者可视化界面进行配置。

在使用NavigationController和Segue进行视图控制器之间的跳转时,有时会出现wkwebview移动到错误位置的问题。这个问题通常是由于Segue的返回操作导致的。当我们使用Segue返回到前一个视图控制器时,NavigationController会尝试恢复前一个视图控制器的状态,但是由于wkwebview的特殊性,可能会导致其位置不正确。

为了解决这个问题,我们可以尝试以下方法:

  1. 在返回操作之前,保存wkwebview的当前位置和状态信息。
  2. 在返回操作完成后,恢复wkwebview的位置和状态信息。

具体实现方法如下:

  1. 在前一个视图控制器中,添加一个属性用于保存wkwebview的位置和状态信息:
代码语言:swift
复制
var webViewPosition: CGPoint?
var webViewState: Data?
  1. 在前一个视图控制器中,重写viewWillAppear方法,用于恢复wkwebview的位置和状态信息:
代码语言:swift
复制
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    if let position = webViewPosition {
        webView.scrollView.setContentOffset(position, animated: false)
    }
    
    if let state = webViewState {
        webView.load(state)
    }
}
  1. 在前一个视图控制器中,重写prepare(for:sender:)方法,用于保存wkwebview的位置和状态信息:
代码语言:swift
复制
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "backSegue" {
        if let destination = segue.destination as? ViewController {
            destination.webViewPosition = webView.scrollView.contentOffset
            destination.webViewState = webView.saveState()
        }
    }
}

这样,当我们使用Segue返回到前一个视图控制器时,wkwebview的位置和状态信息将会被正确恢复,解决了移动到错误位置的问题。

推荐的腾讯云相关产品:腾讯云移动开发套件(https://cloud.tencent.com/product/mks)提供了丰富的移动开发工具和服务,可帮助开发者快速构建高质量的移动应用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS的MVC框架之控制层的构建(上)

在我前面的两篇文章里面分别对MVC框架中的M层的定义和构建方法进行了深入的介绍和探讨。这篇文章则是想深入的介绍一下我们应该如何去构建控制层。控制层是联系视图层和模型层的纽带。现在也有非常多的文章宣扬所谓的去控制层或者弱化控制层的作用,觉得这部分是一个鸡肋,他会使得应用变得臃肿不堪。那么他是否有存在的必要呢? 一般的应用场景里面,我们都需要将各种界面呈现给用户,然后用户通过某些操作来达到某个目标。从上面的场景中可以提取出呈现、操作、目标三个关键字。要呈现出什么以及要完成什么目标我们必须要通过具体操作才能达成,也就是说是通过操作来驱动界面的不断变化以及服务目标的不断达成,操作是联系界面和目标的纽带。为了表征这种真实的场景,在软件建模和设计实现中也应如此。我想这也就是MVC框架这种应用模型设计的初衷吧。在MVC框架中V负责呈现C负责操作而M则负责目标。而且这种设计还有如下更多的考量:

02
领券