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

当我推送和弹出导航控制器时,Subview一直在移动

当你推送和弹出导航控制器时,Subview一直在移动是因为导航控制器的视图层级发生了改变,导致Subview的位置发生了变化。

导航控制器是一种用于管理视图控制器的容器控制器,它通过栈的方式管理视图控制器的压入和弹出操作。当你推送一个新的视图控制器到导航控制器中时,新的视图控制器会被压入导航栈中,并显示在导航栏的顶部。当你弹出一个视图控制器时,它会从导航栈中移除,并显示出上一个视图控制器。

当你推送和弹出导航控制器时,Subview一直在移动的原因可能有以下几种:

  1. 视图层级发生改变:当你推送一个新的视图控制器时,导航控制器会将新的视图控制器的视图添加到当前视图控制器的视图上。这会导致Subview的位置发生变化,因为它的父视图发生了改变。
  2. 自动布局约束问题:如果Subview使用了自动布局约束来确定其位置和大小,当视图层级发生改变时,可能会导致约束冲突或者约束失效,从而导致Subview的位置发生变化。
  3. 视图控制器生命周期方法的调用:当你推送和弹出视图控制器时,系统会调用相应的生命周期方法,如viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear等。如果Subview的位置变化是在这些生命周期方法中处理的,那么在推送和弹出导航控制器时,Subview的位置就会发生变化。

为了解决Subview一直在移动的问题,你可以考虑以下几个方面:

  1. 检查Subview的布局约束:确保Subview的布局约束正确设置,并且不会与其他视图的约束发生冲突。可以使用Auto Layout调试工具来检查约束是否正确。
  2. 检查视图控制器的生命周期方法:确保Subview的位置变化逻辑正确地放置在适当的生命周期方法中。可以通过在生命周期方法中打印日志来确认是否被正确调用。
  3. 检查视图层级的变化:确保Subview被正确添加到目标视图控制器的视图上,并且在推送和弹出导航控制器时,Subview的父视图没有发生改变。

总结起来,当你推送和弹出导航控制器时,Subview一直在移动可能是由于视图层级的改变、自动布局约束问题或者视图控制器生命周期方法的调用导致的。通过检查布局约束、生命周期方法和视图层级的变化,可以解决Subview一直在移动的问题。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(TPNS):https://cloud.tencent.com/product/tpns
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

IOS开发之视图视图控制器

往父视图中添加的SubView会被放在一个数组中。往我们SuperView中添加的SubView的坐标index都是相对于我们的父视图来配置的。...UIAlertView类在屏幕上弹出一个蓝色的警告框,而UIActionSheet类则从屏幕的底部划出动作框 ?          ...6.导航视图             页签条导航视图控制器结合使用,为用户提供从一个屏幕到另一个屏幕的导航工具。...在使用是,你通常不必直接UITableBarUINavigationBar的项,而是通过恰当的控制器接口或Interface Builder来对其进行配置,Table Bar Navigation...brownColor];     [self.view addSubview:self.subView];   } @end   3.我们需要把我们新建的视图控制器和我们的窗口关联,在AppDelegate.m

1.8K70

# iOS导航栏控制Tips

2.从显示导航栏的页面Push到不显示导航栏的页面。 注意: 1.如果导航栏不显示,系统的侧滑返回功能无效。...// 不显示动画,导航栏显示就比较突兀 [self.navigationController setNavigationBarHidden:YES]; // 显示动画,在侧滑导航栏显示就比较顺滑...比如,当页面用户输入了一些内容后,用户要点击返回,想要回到上一个页面,提醒用户是否要缓存已经输入的内容。 如果我们重写了导航栏的返回按钮,那么处理这种情况就很Easy,不做赘述了。...例如singleTask,在做IM类App,跳转到聊天室的场景,就非常有用,可以保证控制器栈中只有一个聊天室,避免返回层级太深。...将新的控制器数组设置为导航控制器的栈数组,根据参数判断是否要显示动画。 我这边做了一些发散,因为一些类可能会有很多子类,那么想要保证父类以及子类的实例都只有一个,所以将方法做了改进。

1.7K31
  • 【IOS开发基础系列】UIScrollView专题

    假如在计时器到点后没有发生手指移动事件,那么scroll view 发送 tracking events 到被点击的subview。...它根据自身框架的大小,剪切视图中的内容,通常框架是应用程序窗口一样大。一个滚动的视图可以根据手指的移动,调整原点的位置。...而前面所说的,中断touch-down事件,取消touch事件是俩码事,所以当快速在子视图上移动的时候,当然可以滚动。...编写很多子类是很沉闷的事情,你最后会有很多无法重复使用的单独视图,而MVC的视图部分的一个重点是视图是可以在不同的控制器不同的模式之中重复使用的,如果我们把所有逻辑都放在视图中,它减少了可复用性。        ...你的代码变得很牢固地配对在一起,它实际上变成了超类的一部分,你无法从UIScrollView中析取它,之后用其它东西代替,如果它在你控制器中且为控制器的一部分,在之后更容易改变它工作的方式重新安排你应用程序的一些部分

    51030

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

    UIView可以产生动画效果的变化包括:     • 位置变化:在屏幕上移动视图。     • 大小变化:改变视图框架(frame)边界。     • 拉伸变化:改变视图内容的延展区域。     ...    self.blueController = [[BlueViewController alloc] initWithNibName: nil bundle: nil];     //设置导航控制器...view插入到目前导航控制器视图上,yellowController后插入,显示在最前面     [self.view insertSubview: self.blueController.view atIndex...: 0];     [self.view insertSubview: self.yellowController.view atIndex: 1];     //创建导航控制器右按钮,按钮名字叫next..."next" style: UIBarButtonItemStylePlain target: self action: @selector(buttonPressed)];     //将按钮添加到导航控制器默认右按钮上

    59130

    iOS导航栏使用总结

    为了解决这个问题,我们需要在App中使用我们自定义的导航控制控制器,示例代码如下: #import “BaseNavigationController.h" //第一步:设置自定义导航控制器使用UIGestureRecognizerDelegate...但是对于普通的视图,此时我们仍然需要注意:非滑动视图的布局仍然要考虑导航标签栏高度,注意不被遮挡,比如布局的时候加上导航栏高度,以免内容被导航栏遮挡。...导航栏透明情况下,滑动视图自动偏移,普通视图被遮挡 其实,这种系统的优化也是可以控制关闭的,关闭优化之后,滑动视图就会普通视图一样,如果还设置其布局的原点是(0,0),其内容就会被导航栏所覆盖,关键代码如下...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航标签的存在,布局若设置其原点设置为(0,0),视图会延伸显示到导航栏的下面被覆盖。...所以我们可以设置self.edgesForExtendedLayout=UIRectEdgeNone,此时视图控制器里内容就会避开导航标签栏了,依然是上面的leftTextViewrightView

    3.2K20

    Cocoa编程中视图控制器与视图类详解

    每一个导航控制器都拥有一个根视图控制器RootViewController,它是“导航弹出栈”的基础,是根。5....可使用popToRootViewControllerAnimated:BOOL直接弹出到根视图控制器。 6. 设置导航栏的按钮并不是去设置导航栏本身。...UITabBarController类       选项卡类允许用户在多个视图控制器之间移动并在屏幕的底部可定制该栏。...选项卡类的方便之处就是不需要象导航栏那样以栈的方式推入弹出视图的操作,而是组建一系列的控制器(它们各自可以是UIViewController、UINavigationController、UITableViewController...•负责视图模型之间的数据及请示的传递。 2. 视图控制器剖析 视图控制器有一个导航项,一个工具栏子项集以及一个tabbarItem项与其关联。 3.

    5K50

    iOS中纯代码创建的UI控件使用weak还是strong

    通过IB创建的控件,其实试图默认对其有着强引用-->比如IB创建一个UIButton -->形成了以下引用:UIViewController -->UIView-->subView --> UIButton...,而只要有subView,就会为其添加强引用,所以IB创建的控件,一般是使用weak。...当我们在 touchsBegan方法中再调用这个控件的地址: ? 发现strong-->该控件存在; ? weak -->控件销毁了!...当如果是 strong 指向的控件,由于 当前的控制器 -->(强引用)指向 该控件:faceBtn,所以removeFromSuperView 无效!...移除了contentView的强引用,但是当前控制器的 强引用还存在,所以该控件不会被销毁! ? 但是,当我们使用weak的时候,----->华丽分割线! ?

    1.5K40

    六天完成一个简单iOS App - 第一天

    方法一:添加站位控制器,我们可以在中间的位置上添加一个空的站位控制器,然后将button覆盖到UITabBar中间,这样做简单方便,但是创建了一个Controller一个UITabBarItem没有别的用处只是用来站位...[@"UITabBarButton" isEqualToString:NSStringFromClass(subview.class)]) continue; if (subview.class...UINavigationController 返回按钮统一设置 方法一:创建基类,其他继承基类,自动有这个按钮类型 创建一个UINavigationController基类,设置好统一的返回按钮,然后让其他导航控制器继承于他...initWithCustomView:button]; } [super pushViewController:viewController animated:animated]; } 4. pop右划手势失效的问题 当我们重写...当分类中有本类中同名的方法的时候,优先调用分类的方法,如果多个分类中有相同的方法,优先调用最后编译的分类。 5.

    1.1K50

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

    1 UISearchBar         UISearchBar是由两个subView组成的,一个是UISearchBarBackGround,另一个是UITextField. 1.1 代码示例 1.... in seachBar.subviews) {     if ([subview isKindOfClass: NSClassFromString(@"UISearchBarBackground")]...)     {         [subview removeFromSuperview];         break;     } } 第二种解决的方法: [[[[[[self searchBar]...(当搜索内容为空,返回的所有数据,如果搜索内容为空,返回空,需要进行其它修改操作.) 4 开发技巧 4.1 兼容IOS7、8并结合自定义导航条使用 4.1.1 核心思路         虽然UISearchController...使用时注意:在searchBarTextDidBeginEditing事件中必须将当前子视图上移44px(即移到导航条中),以便达到让用户觉得UISearchController界面中的Search bar

    45820

    深入详解iOS适配技术

    前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新。...当我们点击周围四条虚线,虚线会变成实线,代表子控件父控件在这个方向上的间距被固定了。当我们点击子视图内部的虚线,同样也变为实线,代表子视图的宽度或者高度被固定了。...也就是说,当我们点击了storyBoard中子控件内带箭头的水平虚线使之变为实线,就相当于[subView setAutoresizingMask:UIViewAutoresizingFlexibleWidth...[subView setAutoresizingMask-UIViewAutoresizingFlexibleWidth].gif 当我们点击了storyBoard中子控件内带箭头的垂直虚线使之变为实线...横屏状态的iPhone不会显示这个控件,横屏竖屏状态的iPad也不会显示这个子控件。 所以,当我们希望某个控件在横屏是显示,在竖屏不显示的时候,可以考虑有sizeClass这种技术。

    8.5K70

    深入探究 Android Activity 启动模式:CLEAR_TOP 与 NEW_TASK 实战解析

    这两个概念对于理解 Android 的 Activity 启动模式,以及如何控制 Activity 的导航生命周期等都非常重要。...当我们启动这个 Intent ,系统会检查当前任务栈中是否已经存在 TargetActivity 的实例。...当我们启动这个 Intent ,TargetActivity 会成为新任务的根,也就是新任务的第一个 Activity。...二、深入探究:小米手机离线推送跳转问题实例分析 本节将阐述在小米手机上点击离线推送,跳转到消息页面,无法弹出手势密码页面的问题定位过程。...然而,使用它们需要谨慎,确保理解了它们的行为可能的副作用。在实际开发中,我们可能会遇到一些复杂的场景,如小米手机上的离线推送问题。

    13320

    iOS初步集成极光推送后你还要做这些事

    当我们把推送证书配置好再把极光SDK拖入项目配置,然后注册极光推送,完成代理,这样没有太多意外你就能收到消息了,但是我们都知道还需要做一些处理,都是哪些呢?...○ 当收到消息,app在前台如何处理?如何跳转?...,你有必要判断当前控制器是否可以push过去,即有没有导航栏,如果没有则不能push,当然也可以像我这样先跳转到个人中心,保证有导航栏,但是这样的处理也许不适用你的app....当你在后台,收到消息,通知栏会弹出一个系统alert,一旦你点击了这个alert,目标app会被唤起,同时调用下面代理函数。...image.png 设备标签、别名、ID、群推 标签别名差不多。只说别名。现在有这个场景:我想给我所有的注册用户推送消息,没注册的不想推。

    2.8K50

    IOS开发系列——UIView专题之二:动画篇【整理,部分原创】

    UIView可以产生动画效果的变化包括: •位置变化:在屏幕上移动视图。 •大小变化:改变视图框架(frame)边界。 •拉伸变化:改变视图内容的延展区域。...self.blueController =[[BlueViewController alloc] initWithNibName:nil bundle:nil]; //设置导航控制器view的大小占整个屏幕...view插入到目前导航控制器视图上,yellowController后插入,显示在最前面 [self.viewinsertSubview:self.blueController.view atIndex...:0]; [self.viewinsertSubview:self.yellowController.view atIndex:1]; //创建导航控制器右按钮,按钮名字叫next //添加buttonPressed...initWithTitle:@"next" style:UIBarButtonItemStylePlaintarget:self action:@selector(buttonPressed)]; //将按钮添加到导航控制器默认右按钮上

    1.4K10

    iOS项目——自定义UITabBar与布局

    主要缺点就是需要先申请一个位置控制器来占位比较浪费,而且这种也只适用于各控件的大小是均匀的情况,当我们需求中每个TabBarItem的规格尺寸不一样,我们就无法使用这种方案实现。   ...TabBar中各子控件的属性布局。...同样的,也有几点需要注意的: 【发布】按钮的初始化还是上面一样,应该采用单例模式进行初始化,具体就不展开; 重写  方法,应该先调用其父类的此方法 [super layoutSubviews]; ,...[@"UITabBarButton" isEqualToString:NSStringFromClass(subview.class)]) continue; if (subview.class...3 添加红点提示   现在很多App的TabBarItem在有新消息在右上角会有一个红点提示,有的甚至还会有具体数目的提醒,类似我们常用的QQ、微信、微博、头条等都会有类似的功能,这个提示在iOS中的学名叫做

    3K90

    View Controller编程指南

    图显示了ViewControllerView之间的内置关系。 ViewController总是具有对其root view的引用,并且每个view都具有对其subview的强引用。...拆分ViewController管理其subview的整体大小位置,但子ViewController管理这些view的实际内容。...文档对象是知道如何读写数据到持久存储的控制器对象。 当你子类化时,你需要添加任何你需要的逻辑方法来提取数据,并将其传递给ViewController或其他应用程序的部分。...例如,UINavigationController对象显示来自子ViewController的内容以及由导航控制器管理的导航可选工具栏。...清楚数据生命周期 在MVC设计模式中,ViewController的作用是促进modelview之间的数据移动

    1.3K20

    Flutter学习笔记:BottomNavigationBar实现多个Navigation

    最近我研究了一下Flutter,但是在使用Navigator的时候遇到了一个很头痛的问题,就是当我们去来回切换导航按钮,Flutter会重新build,从而导致控件重新Build,从而会失去浏览历史。...如果我们现在运行应用程序,我们可以看到推送在选择列表项正常工作,并且BottomNavigationBar保持不变。 棒极了!? ?...我们可以独立地推送/弹出每个导航器,并且后台导航员保持他们的状态。? One more thing 如果我们在Android上运行应用程序,当我们按下后退按钮,我们会发现一个有趣的现象: ?...如果我们再次运行应用程序,我们可以看到按下后退按钮会解除所有推送路线,只有当我们再次按下它我们才会离开应用程序。 ?...1_qQW2iGXiWL2F1tu6cLQfwg.gif 需要注意的一点是,当我们在Android上推送新路线,会从底部滑入。 相反,惯例是在iOS上从右侧滑入。

    4.3K20

    爬虫 (十八) 如何通过反编译理解 for 循环 (十)

    每次调用这个方法,应该返回迭代器的下一个元素。一旦元素都遍历结束,它应该抛出StopIteration 异常 2. 当我们调动内置函数next() ,实际内部调用的是本方法 3....当我们调动内置函数iter() ,实际内部调用的是本方法 自己写一个迭代器 现在我们已经知道迭代协议的原理,可以写一个自己的迭代器了。...for 循环工作原理 现在我们已经知道什么是迭代器可迭代对象,接下来了解一下 for 循环是如何工作的 再看一下前面的例子 当我们执行上面的代码块,发生了以下这些事情: ? 1....在获得可调用象的对(如print)之前,会弹出所有遇到的参数 一旦获得可调用对象,则把所有参数传递给它并调用 可调用对象执行结束后,把返回值推送到 TOS 中,这里是 None 16 POP_TOP TOS...推送可调用函数的参数对象到栈中 26 CALL_FUNCTION 1 可调用函数及其参数会从栈中弹出,然后执行函数并将其返回值推送到 TOS 28 POP_TOP TOS(栈顶元素),即将函数返回值(这里是

    1.7K20
    领券