系统在某些情况下会自动调节UIScrollView的contentInset
出现情景
如果一个控制器(ViewController)被导航控制器管理,并且该控制器的第一个子控件是UIScrollView,系统默认会调节UIScrollView的contentInset
UIEdgeInsetsMake(64, 0, 0, 0) // 有导航栏
UIEdgeInsetsMake(20, 0, 0, 0) // 没有导航栏
如果上述情况中的导航控制器又被UITabBarController管理,那么
UIEdgeInsetsMake(64, 0, 49, 0) // 导航控制器又被UITabBarController管理
如何取消系统的默认这自动调节功能
ViewController.automaticallyAdjustsScrollViewInsets = NO;
代码验证 -->
//
// ViewController.m
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (nonatomic, weak) UISwitch *customSwitch;
@end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad];
UISwitch *customSwitch = [[UISwitch alloc] init];
[self.scrollView addSubview:customSwitch];
self.customSwitch = customSwitch;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"%@",self.scrollView);
NSLog(@"%@",NSStringFromUIEdgeInsets(self.scrollView.contentInset));
NSLog(@"%@",NSStringFromCGRect(self.customSwitch.bounds));
}); }
// 打印结果 /*
情况一 只有UInavigationController
<UIScrollView: 0x7fbbd301fa00; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fbbd27246e0>; layer = <CALayer: 0x7fbbd25176a0>; contentOffset: {0, -64}; contentSize: {0, 0}>
{64, 0, 0, 0}
{{0, 0}, {51, 31}}
*/ /*
情况二 只有UInavigationController,但是隐藏了导航条
<UIScrollView: 0x7f80cb024200; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7f80c9563330>; layer = <CALayer: 0x7f80c955f090>; contentOffset: {0, -20}; contentSize: {0, 0}>
{20, 0, 0, 0}
{{0, 0}, {51, 31}} */
/* 情况三 既有UInavigationController,又有UITabBarController
<UIScrollView: 0x7fe60903fa00; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fe608e3b100>; layer = <CALayer: 0x7fe608f06320>; contentOffset: {0, -64}; contentSize: {0, 0}>
{64, 0, 49, 0}
{{0, 0}, {51, 31}}
*/ // 上面采用了延迟的方法(GCD中的方法)来打印,在viewDidLoad方法中打印的结果不是最终的结果,当然也可以采用下面的方法来打印 - (void)viewDidLayoutSubviews { // NSLog(@"%@",self.scrollView);
// NSLog(@"%@",NSStringFromUIEdgeInsets(self.scrollView.contentInset)); }
- (void)viewDidAppear:(BOOL)animated { // NSLog(@"%@",self.scrollView);
// NSLog(@"%@",NSStringFromUIEdgeInsets(self.scrollView.contentInset)); } @end
系统在某些情况下会自动调节UIScrollView的contentInset的更多相关文章
- 如何在不使用系统函数的情况下实现PHP中数组系统函数的功能
PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= ar ...
- 定点分析: MySQL InnoDB是如何保证系统异常断电情况下的数据可靠性?
MySQL支持事务,所以保证数据可靠的前提是对数据的修改事务已经成功提交 这个问题可以解释为'MySQL InnoDB是如何保证事务C(一致性)D(持久性)性的?' 可能出现的两种情况: (一致性)数 ...
- 【Nginx】不改系统源代码的情况下,动态网站离线缓存方案
背景: 公司的一套系统,由前端.界面.服务层.大数据开发平架等多层组成,每一层被划分为多个模块,每个模块会依赖若干组建.由于公司的这套系统是部署在内网环境中的,现在需要拿出去给客户演示,用一个笔记本装 ...
- 高并发情况下Linux系统及kernel参数优化
众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制.内核TCP参数方面和IO事件分配机制等.下面就从几方面来调整使Linux系统能够支持高并发环境. Iptabl ...
- 如何在Windows Server 2008 R2没有磁盘清理工具的情况下使用系统提供的磁盘清理工具
今天,刚好碰到服务器C盘空间满的情况,首先处理了临时文件和有关的日志文件后空间还是不够用,我知道清理C盘的方法有很多,但今天只分享一下如何在Windows Server 2008 R2没有磁盘清理工具 ...
- 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...
- CentOS系统在不重启的情况下为虚拟机添加新硬盘
一.概述 用过虚拟机的都知道,如果在系统运行的时候去给虚拟机添加一块新设备,比如说硬盘,系统是读取不到这个新硬盘的,因为系统在启动的时候会去检测硬件设备.但是我们也可能会遇到这样的情况,比如正在运行比 ...
- 在不重装系统的情况下创建Linux的Swap分区
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=649 操作环境: CentOS 7 操作背景: 本文中使用的CentOS Linux系统在安装的时候没有创建Swap ...
- windows下用cmd命令netstat查看系统端口使用情况
开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...
随机推荐
- 【转载】关于shell中的basename
转载自:http://blog.chinaunix.net/uid-20499529-id-1940182.html basename 是去除目录后剩下的名字example:shell>temp ...
- webapp项目前端总结
提纲 整体把握,从设计稿入手——技术选型 并行开发,从实现静态页面开始 前端自动化 前端js逻辑 前后端集成 小问题集合 总结 1.整体把握,从设计稿入手 —— 技术选型 新项目到手,算是运气好,设计 ...
- [Python] raw_input
该函数输入的是字符串,如果想输入数字,可以用强制转换.
- 一个简单的3DTouch、Peek和Pop手势Demo,附github地址
参考文章:http://www.jianshu.com/p/74fe6cbc542b 下载链接:https://github.com/banchichen/3DTouch-PeekAndPopGest ...
- Websocket协议的学习、调研和实现
本文章同时发在 cpper.info. 1. websocket是什么 Websocket是html5提出的一个协议规范,参考rfc6455. websocket约定了一个通信的规范,通过一个握手的机 ...
- 下载image或者其他文件
public void SaveDownLoadAsPNG(Image img, string filePath) { try { WebRequest request = WebRequest.Cr ...
- 6/13 sprint2 看板和燃尽图的更新
- Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe
序言 使用Ubuntu和vim已经有一段时间了,对于Vim下的插件应用,我总是抱着一股狂热的态度.这次,又在网上闲逛着,发现了一个个人博客提到了Vim代码补全这回事,并提到了YouCompleteMe ...
- 迭代接口的IEnumerator
我们经常在工作中用到对List,Dictionary对象的Foreach遍历,取出每一项. 其实这个接口很简单,只有一个属性2个方法. [ComVisible(true), Guid("49 ...
- 【原创】本地通过IIS设置开发的localhost网站的域名改为个性域名方法
效果图: 操作步骤如下: 第一步: 在本地IIS上新建个网站,如下图所示 第二步,修改host文件 加配置节点如下图所示 第三步,在vs里面找到你的web项目, ...