为什么UIView会div向下偏移移

UIScrollView自动向下偏移原理 - 简书
UIScrollView自动向下偏移原理
iOS11前:automaticallyAdjustsScrollViewInsetsiOS11:contentInsetAdjustmentBehavior
我们知道,当我们放入一个UISCrollView到view上的时候,可以根据上述的两个属性来实现scrollView内容的布局调整,以避免被遮挡。默认会帮你实现,你也可以选择关闭,然后自己布局。那么到底是怎么实现偏移的呢???看下视图控制器的根view:
根view的frame和bounds
我们的table加在根view上,并且frame等于根view的frame:CGRect tableRect = self.view._listTable = [[UITableView alloc]initWithFrame:tableRect
style:UITableViewStyleGrouped];
table的frame和bounds
我们看到tableView的frame和bounds的y值是不一样:frame :{0,0,375,812}bounds :{0,-88,375,812}这个看起来就比较诡异了。因为我们知道bounds的是相对于自身坐标系的永远是(0,0),但是这里的bounds是(0,-88),而frame是{0,0}。我们知道在iOS11中因为安全区的存在,table进行了88pt的向下偏移(没有大标题),但是我们看界面上,table并没有往下移动啊,那么其实就是反过来处理了,我们将table的原点变成了(0,-88),因为我们是改变了坐标点,并没有偏移,所以table在view中的位置没有变,所以frame还是{0,0},而bounds则变成了{0,-88}。这样我们在table中放置元素的时候,比如加入一个子视图subView,设置frame为{0,0,200,100},可想而知,因为原点其实是{0,-88},那么{0,0}的位置其实是在table原点往下88pt的地方,这样就做到了内容的向下偏移了。所以:我们所说的table因为安全区向下偏移了一定的距离,是通过更改table的原点,来达到内容偏移的目的。而且我们看到navigationBar其实与table是共享背景的。也是红色。
转载:http://www.cocoachina.com/swift/98.html 前言 TangramKit是iOS系统下用Swift编写的第三方界面布局框架。他集成了iOS的AutoLayout和SizeClass以及Android的五大容器布...
1.iOS中的round、ceil、floor函数略解 round如果参数是小数,则求本身的四舍五入.ceil如果参数是小数,则求最小的整数但不小于本身.floor如果参数是小数,则求最大的整数但不大于本身. Example:如何值是3.4的话,则 -- round 3.0...
在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画、关键帧动画、动画组、转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等。在今...
这次学校里被抽到有两门科目统考,老师们很用心,明显感觉到维的压力增大了,这几天作业量一下子就加大了。每天放学迟,回家后也有很多作业,一般做好作业基本上都到睡觉时间了。练琴的时间也抽不出来(这是维的说法,在我看来挤挤抽20分钟应该可以的),为了不给太大压力,我也不说啥了。 昨...
文丨赵自力 你知道生活中有哪些东西是不能自拔的吗? 我总结过,最令人不能自拔的,除了爱情,还有牙齿。 01 我小时候从未关心过牙齿,甚至买牙膏牙刷也是从初中才开始的。 可以想象,小的时候一头黄发,一口黄牙。所以,牙痛常常光顾着我,也是情理之中的事。 牙齿疼了,母亲是最好的止...
我们经常会感叹人与人之间的差别,同样是每天上班下班,周末双休,有的人能抽出时间来学会烹饪,偶尔做一两道拿手好菜往朋友圈一发,立马收获一大堆的“赞”。有人提高了自己的英语水平,有人练出了马甲线…还有人,什么也没做,什么也没学到。 大部分人的时间都可以分成三部分:八小时工作,八...
第三十二章 我们都是害怕寂寞的人 钟泽炜要去公司开董事会,他必须到场,答应中午回来陪锦心吃饭。再三叮嘱,才稍微放心离开。他离开一小时,锦心也一个人开着车,也出门了。说要去散散心,仆人也就没拦着。 董事会上,关于钟泽炜的私事,自然也成了议题。钟泽炜没有想到,居然散播的这么快,...
亲耐滴,面试官: 当候选人踏入房间的那一刻, 10秒内,你的内心是不是这样的: 。。。。。。 或许,你们素未谋面 但短短10秒内 你就决定了眼前这位候选人的命运 这也是很多面试官会犯的一个错误——以直觉(即第一印象)而不是真实的数据反馈来决定是否录取候选人。曾经有位HR说,...[04]IOS(12)
在一个VC里如果第一个控件是UIScrollView,注意是第一个控件,就是首先addsubview在VC.view上。
接着加到scrollView上的View就会在Y点上发生64的偏移(就是navigationBar的高度44+statusbar的高度20)。
这个在iOS7以后才会出现。
解决办法:
self.automaticallyAdjustsScrollViewInsets =
如果这个scrollView不是第一个加到self.view上的。不会发生64的偏移。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
不知道设置什么地反,设置self.view的高度也不行,设置tableview的高度也不行。
有很多行,向下拖一下之后就自动弹回来,本人菜鸟,望高手指定一下。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你是说下面有很多的空白行么,如果是因为有空白行的话加下面一行代码就行了
self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。iOS 由ScrollView中的子视图View向下偏移64个像素的思考 - 简书
iOS 由ScrollView中的子视图View向下偏移64个像素的思考
UINavigationController设置为self.window的根视图,然后将UIVIewController设置为UINavigtionController的根控制器。在UIViewController中加入一个ScrollView,再ScrollView中加入一个view。运行发现.:ScrollView显示正常,而 ScrollView中的子视图VIew向下偏移了64个像素。
解决方法:
设置UIVIewController的automaticallyAdjustsScrollViewInsets属性
self.automaticallyAdjustsScrollViewInsets = NO;
在解决这个问题的过程中,尝试了好几个属性的设置,在此一并记录一下作用:
@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES
@property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
@property(nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0.
1、首先我们来说说:automaticallyAdjustsScrollViewInsets这个属性,默认值为YES.
这个属性的官方解释:
A Boolean value that indicates whether the view controller should automatically adjust its scroll view insets
Default value is YES, which allows the view controller to adjust its scroll view insets in response to the screen areas consumed by the status bar, navigation bar, and toolbar or tab bar. Set to NO if you want to manage scroll view inset adjustments yourself, such as when there is more than one scroll view in the view hierarchy.
如果是UIScroolview以及继承自它的控件,默认值YES是设置它的Insets为自适应。这里自适应其实就是空出导航栏的位置。
PS:这个属性不仅可以解决类似于开篇的问题。也对直接添加到viewcontroller上的控件起作用。
当 automaticallyAdjustsScrollViewInsets 为 NO 时,tableview 是从屏幕的最上边开始,也就是被导航栏和状态栏覆盖。如下图:
当 automaticallyAdjustsScrollViewInsets 为 YES 时,也是默认行为,表现就比较正常了。
不贴边.png
2、edgesForExtendedLayout
它是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向,edgesForExtendedLayout的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果视图中有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。
PS:这个属性只对直接添加到viewcontroller上的控件都起作用,但不适用于开篇那样的问题。
UIRectEdgeAll.png
edgesForExtendedLayout设置成UIRectEdgeNone截图如下:
UIRectEdgeNone.png
导航栏就变成灰色的了,此时只需设置一下
self.navigationController.navigationBar.translucent = NO;
显示就完全正常了。edgesForExtendedLayout 为UIRectEdgeNone时,效果跟automaticallyAdjustsScrollViewInsets 为 YES 时一样。
3、extendedLayoutIncludesOpaqueBars
英文解释:
So, if you extend your view to cover the navigation bar (edgesForExtendedLayout toUIRectEdgeAll) and the parameter is NO (default) it wont cover the status bar if it's opaque.
If something is not clear, write a comment and I'll answer to it.
How iOS knows what UIScrollView to use? *iOS grabs the first subview in your viewcontroller's view, so the one at index 0, and if it's a subclass ofUIScrollView then applies the explained properties to it.
Of course, this means that UITableViewController works by default (since theUITableView is the first view).
默认值为NO,这个属性在状态栏不透明的情况下才生效。如果状态栏是不透明的,那么页面的布局默认是不会包含状态栏的,除非将这个属性设置成为YES。
但是我怎么设置效果都不明显,有待进一步研究。
Behind every beautiful thing, there's some kind of pain.####
美丽背后,必有某种努力。####
让人迷茫的原因只有一个——那就是本该拼搏的年纪,想得太多,做得却太少!
Good, better, best。 Never let it rest。 Until your good is better and your better is best。
本文为大地瓜原创,欢迎知识共享,转载请注明出处。虽然你不注明出处我也没什么精力和你计较。作者微信号:christgreenlaw Overall 本文关注的是状态栏(Status Bar,就是那个显示时间、信号、电量的栏)遮盖应用的问题(其实也就是苹果推出的沉浸式设计,即状...
*7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block或__weak给其重新命名一遍 写的方法 (1)Bolck 的实现:返回值(^名字)(形式参数……)=^返回值(实参……){代码,有返回值的话就返回}; (2)...
/* UIViewController is a generic controller base class that manages a view. It has methods that are called when a view appears or disappe...
iOS 7以后在ViewController里面引进了一系列属性用于管理页面布局。 extendedLayout有几个相似的参数: 下面是Apple官方提供的文档解释,看过之后还是觉得太过于抽象,于是用代码来实验吧。**edgesForExtendedLayout **Th...
下雨蛙鸣,夏天知了困时睡觉,饿了吃饭结婚生子,生老病死上天注定,活着何味山本是山,水本来水山可是山,水可是水功成名就,达官显赫抬手可摘,唾手可得有之求无,失之伤心明白一切,不明己身人欲静之,风必摧之人欲爱之,天必隔之徒留空念,飘洒人间千古留名,人口脍炙寥寥余生,抬头低头若存...
最近,各种群都流传一篇文章:生命在于静止。 而私聊里有人赞美这篇文章,说作者观点独特,有相见恨晚的感觉。我认为我有必要说几句话。
这是一篇观点荒谬的文章。生命在于运动,这是全世界的共识。作者拿猎豹和乌龟对比,一个好动一个好静。猎豹的寿命确实比乌龟短得多。所以作者轻易...
小婕女士快五十岁了,是一个待业在家,提前进入退休状态的中年妇女,没什么特别的兴趣爱好,也没有什么特别聊得来的三两好友,每日的工作就是看看QQ,刷刷微信,微博逛一逛,看看搞笑视频,买买菜,做饭给老公女儿。就这样,小婕女士日复一日过着没有新意,也没什么追求的生活,尽管年纪不大但...
连着更了一段时间的文,发现如果让我讲故事、叙事,都还能勉勉强强过关。只是语言的优美度是硬伤。要想达到辞藻华丽需要长期的积累,在目前的写作密度下,我感觉自己好像也很难专门拿出时间来去钻研语言。可是面对困难我们就要退缩么?当然不!于是我想到了几种不需要占用大量时间却仍然有效的方...
可能是天气的影响,又或许和刚刚过去的月考有关,最近,我感觉到有些许的沉重与疲倦。 秋风起兮云飞扬,是对大自然的美好感觉。而怒江大峡谷的秋色更美,奔腾的江水慢下来脚步,缓步香茵,演绎着湛蓝湛蓝的秋天故事。 没有任何征兆,低温天气骤然而至,竟引发了我的颈椎痛,连累到脑血管供血不...UI拓展:tableView内边距偏移,向下滑动,视图放大,向上滑动,视图大小不变,位置向上偏移
生成效果图如下:
向上滑动放大效果如下:
向下滑动效果图如下:
ViewController.m文件中代码如下:
"ViewController.h"
@interface
ViewController
()&&/span&UITableViewDataSource,UITableViewDelegate&
(nonatomic,strong)UITableView
(nonatomic,strong)UIImageView
@implementation
ViewController
(void)loadView{
loadView];
& self.tableView.backgroundColor&
= [UIColor
whiteColor];
& self.tableView
[[UITableView
initWithFrame:[UIScreen
mainScreen].bounds
style:UITableViewStylePlain
& [self.view
addSubview:self.tableView];
& self.tableView.delegate
& self.tableView.dataSource
& [self.tableView
registerClass:[UITableViewCell
forCellReuseIdentifier:@"cell"];
& self.imageView
[[UIImageView
initWithFrame:CGRectMake(0,
self.view.frame.size.width,
& self.tableView.contentInset
UIEdgeInsetsMake(200,
& self.imageView.image
imageNamed:[NSString
stringWithFormat:@"%d",8]];
& [self.view
addSubview:self.imageView];
(void)scrollViewDidScroll:(UIScrollView
*)scrollView{
scrollView.contentOffset.y;
& NSLog(@"%f",y);
[self.imageView
setFrame:CGRectMake(y
[self.imageView
setFrame:CGRectMake(0,
- (y + 200),
self.view.frame.size.width,
(NSInteger)tableView:(UITableView
*)tableView
numberOfRowsInSection:(NSInteger)section{
(UITableViewCell
*)tableView:(UITableView
*)tableView
cellForRowAtIndexPath:(NSIndexPath
*)indexPath{
& UITableViewCell
= [tableView dequeueReusableCellWithIdentifier:@"cell"
forIndexPath:indexPath];
& cell.textLabel.text
stringWithFormat:@"%ld",indexPath.row];&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 tableview 向下偏移 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信