首页
学习
活动
专区
工具
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)提供了丰富的移动开发工具和服务,可帮助开发者快速构建高质量的移动应用。

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

相关·内容

Xcode:处理故事板的更好方式 享受Interface Builder的提示和技巧

但对开发人员而言,这可能会导致多个问题。 源代码控制:故事板合并冲突很难解决,因此简单地在单独的故事板中工作将使您的团队生活更轻松。 故事板文件变得沉重且难以导航。...有多少次您在错误的ViewController中单击一次无意中更改了约束?...这将简化命名约定,并在建议#3中为您提供一些好处。 3.在其UIViewController子类中初始化storyboard。...Unwind segue?从没听说过。 有时导航流程应该将用户带回到前一个屏幕。 这是另一个常见的错误:使用新的segue导航回以前的viewController。...在这种情况下,从按钮拖动到“退出”出口是期望代码已经在您的项目中。 通常,当您为按钮创建动作插座时,它会将代码放在拥有该按钮的同一个类中。

1.4K30
  • iOS 9 Storyboard 教程(二上)介绍Segue静态单元格(static cell)

    使用segue最屌的就是,你不必写任何代码来present新的控制器,也不必使用IBAction方法连接按钮.你所做的只有从Bar Button Item 拖动到下一个控制器,就足以创建一个过渡了....Storyboard提供了一个称为unwind segue的特性,它使得Storyboard可以具有返回的能力.这个是你接下来要实现的内容.主要有3步: 1.为用户创建一个选择对象,通常是一个按钮. 2....在控制器里创建一个unwind方法,可以返回到上一个控制器. 3.在storyboard中连接方法和对象....现在你可以创建最终的unwind segue了.在PlayersViewController.swift(而不是detail控制器)类末尾添加unwind 方法: @IBAction func cancelToPlayersViewController...UIViewController的Table View对象,在运行时期间将不会起作用,原因是因为UITableViewController提供了一个负责静态单元格数据源的额外机制.Xcode为了防止你编译这个工程,甚至会输出错误信息

    3.3K10

    添加多个屏幕-创建格线布局

    在第一个图标的顶部,Control +从第一个图标(黄色圆圈)拖动到第二个图标的视图。它将创建一个segue并选择Present Modally。命名segue:HomeToDialog。...MultipleScreens04 委托 Delegate 首先,让我们为CollectionView创建一个IBOutlet,Control +从Collection View ****拖动到swift...使用Command + R运行代码,然后修复2个错误。它将为您提供运行CollectionView所需的两种方法。 Sections中的项数和 Cell 在第一个函数内部,我们只需返回3。...到目前为止,如果您运行该应用程序,您将看到3个类似的cell,并且它是可滚动的。问题是它现在做的不多。 ?...转到DialogViewController,为屏幕声明一个常量并枚举它们:iPhoneX1,iPhoneX2和iPhoneX3

    2.9K40

    iOS14开发-网络

    基本概念 URL Uniform Resource Locator(统一资源定位符),表示网络资源的地址或位置。 互联网上的每个资源都有一个唯一的 URL,通过它能找到该资源。...响应状态码 状态码 描述 含义 200 Ok 请求成功 400 Bad Request 客户端请求的语法出现错误,服务端无法解析 404 Not Found 服务端无法根据客户端的请求找到对应的资源 500...确定请求 var request = URLRequest(url: url) // 3....与Swift交互起一个名字:callbackHandler,WKWebViewSwift发消息的时候会用到 // 此句要求实现WKScriptMessageHandler configuration.userContentController.add...JavaScript 调用 WKWebView: // Swift方法,可以在JavaScript中调用 func userContentController(_ userContentController

    2.4K30

    【IOS开发基础系列】Storyboard专题

    这种转换叫做 segue(连接)。创建 segue 只需用    ctrl+ 拖拽从一个 viewcontroller 拖到另一个 viewcontroller 即可。...这将导致增加一个 ViewController 到画布中:         当然你也可以直接从 Object Library 中拖一个NavigationController,但 Embed In 命令更简单一些...NavigationController自己有一个关系,连接的是TableViewController。此外还有另外一种箭头,“segue”,我们在后面讲。         ...拖两个 Label 到Cell 中,将它们放置到大致等于原先所在的位置。随意修改它们的字体和颜色。将两个label的高亮色为白色。...3.1.2 不能同时设置一个控件横向或纵向的相对间距后,又去设置绝对尺寸,否则会导致控件不能显示,也不会报错!

    1.1K30

    模拟京东首页导航条渐变

    made in 小蠢驴的京东搜图.jpg 京东App的效果演示: 京东Demo演示.gif 京东App首页导航条 - 细节点: 根据拖动,导航条的透明度渐变 拖动到一定的位置,整个导航条的元素 (按钮&...进行操作 隐藏导航条: - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.navigationController.navigationBarHidden...alpha等于0,符合京东导航条(虽然目前看上去丑了点); ==>如果有需求是起始alpha=1,慢慢下拉会慢慢透明的,解决办法:_navigationView.alpha = 1 - alpha; 3....rightBtn.selected = YES; } } 导航条样式变化演示.gif 如图,我们发现导航条颜色&&按钮图片改变了 但是,变成darkGrayColor颜色之后,offsetY又往上,...return _statusBarStyle; } 顶部工具条样式变化演示.gif 5.透明度变化的时候,图片 && 搜索框之类的透明度也跟着变化,不符合要求 对比京东Demo,发现问题所在 错误界面结构

    2.5K90

    抓住iOS的未来 - 30天学习编写30个Swift小程序

    其实我并不是唯一在国内发起这个30天30个Swift小程序并且将其开源的作者,但是我可能是唯一一个从头到尾用XCode 8 + Swift3环境编写的作者。...里的方法就好 - 如果切换动画只需要关注之前的VC和之后的VC,不需要关注中间过程,直接实现以下方法即可: navigationController(_ navigationController: UINavigationController...AnimationInTableViewCell.gif 我学到了 开始的思路是在willDisplay的delegate里进行动画操作,效果良好,但是发现在滚动cell时发生cell错乱的现象,原因是在滚动时cell重绘导致重新调用...willDisplay进而坐标错误。...注意,这种方式要排除上下滑动Cell的情况,不要错误触发。

    2.5K20

    iOS 组件化-路由解耦思想 JLRoutes 实战篇(一)App内控制器跳转

    这个文件主要用于管理所有 Router 映射到指定控制器类名( class ), 以及相关参数的配置文件( title,needLogin等 ), 具体配置根据实际项目需求进行即可; 为了编译期能更好的检查到错误...URL , 使用的时候直接通过外部声明的常量字符串来指定跳转即可; 这样管理 Router URL 能更加方便阅读和维护, 如果直接使用 @"/login" 的方式来进行绑定可读性差, 很容易出现粗心大意导致错误...respondsToSelector:NSSelectorFromString(key)], 如果 VC 有这个属性则直接使用 KVC 的方式来进行赋值, 为了防止在开发时, 传入的字典 Key 与 VC 属性不匹配导致一些...,vc); ​ if ([segue isEqualToString:kJSDVCRouteSeguePush]) { //PUSH if (currentVC.navigationController...stringWithFormat:@"%@",parameters[kJSDVCRouteBackIndex]]; UINavigationController* nav = currentVC.navigationController

    1.5K20

    Swift-低仿搜狐新闻标签页效果

    (array1, array2, indexPath.item) _ = navigationController?....总结 用Swift造的第一个轮子,主要是给自己增加点积累,也练练Swift的一些用法。...如果将Item从我的频道移动到更多频道里面,删除的x(小叉叉)依然存在。...我的频道里面第一个Item本意上我是不希望他可以被移动的,但是如果将其它的Item移动到第一个位置依然可以,背离了我的初衷。...仔细观察了一下,《头条》或者《搜狐》的更多频道里,如果将我的频道中的Item移动到更多频道里,《搜狐》只是放在更多频道里面的最后一个位置,《头条》是放在第一个的位置,并没有放哪里都行,我突然又感觉我自己的又有点多此一举了

    1.9K40
    领券