隐藏导航栏,偏移20PX
1:让ViewController在NavigationBar下面开始布局。
automaticallyAdjustsScrollViewInsets作用
当Controller上存在唯一一个UIScrollview及其子类时,会自动设置内边距,让scrollview占据整个视图,又不会让导航栏覆盖。当Controller上的第一个子视图不是UIScrollview及其子类时,不会自动设置内边距,原点会从状态栏开始,而不是导航栏下面,造成64px的偏移。解决方案有两种
1 2 3 4 | /// 取消系统自动布局内边距 if ([nav respondsToSelector: @selector (setAutomaticallyAdjustsScrollViewInsets:)]) { nav.automaticallyAdjustsScrollViewInsets = NO ; } |
/// 取消扩展的边距 if ([nav respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { nav.edgesForExtendedLayout = UIRectEdgeNone; }
/// 在iOS11取消内边距要使用新方法 UIScrollView *sv = nil; sv.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
也许你已经发现了,当你隐藏了页面中的导航栏,并且在self.view上添加了一个tableview/scrollView时,你的tableview的位置会向下偏20个单位,并且你怎么找都找不到问题所在。。。因为这就不是你的问题。
你会发现在ios7.1及以上的系统下都会存在这个bug(7.1版本以下我没有试过,可以自己试试),解决办法就是不要直接把你的tableview加在self.view上,而是先要在self.view上放上一个任意的子视图,再将tableview添加在self.view上,这样tableview就不是self.view的第一子视图了。归结为一句话就是滚动视图不能作为父视图的第一子视图。
问题代码
self.navigationController.navigationBar.hidden = YES;
解决方法,就是不让滚动视图作为父视图的第一子视图。
// 添加占位视图
[self.view addSubview:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]];
解决键盘遮挡问题。一个思路就是:
在BaseViewController页面添加ScrollView。通过监听键盘事件来处理偏移。
UIScrollView 三个属性解析
一: scrollToTop
是否允许点击状态栏滚动到顶部。默认允许。
二:trancking(readOnly)
用于表示用户是否已经解除scrollView但可能还没有开始滚动。
在手指接触到scrollView的一瞬间发生三件事:
1 tracking属性变为yes。
2 触发拦截事件。
3 一个内置的计时器开始生效,用来检测在极短的时间内手指是否发生了移动
如果在时间间隔内没有发生明显的滚动。会将事件传递给subView。沿着正常的响应链传递。如果发生了比较大的移动,scrollView会处理这次的触摸事件。
三:delaysContentTouches:
默认的延迟处理手势是打开的。如果在极短的时间里能确定移动就自己处理。否则就传递给子视图进行处理。如果设置为"NO", scrollView立马触发- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view方法 ,交给用户自己判断
四:canCancelContentTouches:
默认值为YES,如果为YES,当用户触摸手势已经被确定交给subview响应的时候 ,会立即调用- (BOOL)touchesShouldCancelInContentView:(UIView *)view ,交给此方法处理接下来的动作,如果此方法返回NO,则继续传递给subview,scrollView不会滚动,返回YES,则scrollView会滚动 ,subview 会取消处理这个事件 如果返回NO ,则scrollView不会滚动, subview响应这个触摸事件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix