(参照点是:父亲的坐标系统) bounds:该view在本地坐标系统中的位置和大小。...(参照点是:父亲的坐标系统) origin是frame或bounds的左上角坐标 contentInset和contentOffset contentSize是contentView的大小 contentInset...是scrollview当前显示区域顶点相对于frame顶点的偏移量 假如有一个ScrollView(scrollViewA),设置scrollViewA的contentInset为UIEdgeInsets...为(-20,-10) 在scrollViewA的内容滚动时contentSize是不变的 contentInset也是不变的 变得只是contentOffset和bounds 并且contentOffset...和bounds的值是一样的 上拉y变大,下拉y变小 左拉x变大,右拉x变小 可以这样想以scrollViewA的左上角为坐标系原点y轴向上为正,x轴向左为正,那么contentOffset和bounds
UITableView是最常用的一个iOS控件,现要做一个如下图的UITableView,其中白色部分就是cell,可是默认的UITableView中cell之间是没有间隔的,那么办呢?...if (scrollView == self.tableView) { CGFloat sectionHeaderHeight = 10; if (scrollView.contentOffset.y...= 0) { scrollView.contentInset...= UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0); } else if (scrollView.contentOffset.y..., 0, 0); } } } 但是这种方式是通过scroll偏移量来监听和改变tableview的contentInset。
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return...12; } -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {...=0) { scrollView.contentInset = UIEdgeInsetsMake...(-scrollView.contentOffset.y, 0, 0, 0); } else if (scrollView.contentOffset.y>=sectionHeaderHeight...) { scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0); }
今天主要讲三个跟交互有关的效果(稍微有点标题党啊,其实也没有多进阶……),也不是直接用的UIScrollView,而是它的子类UITableView和UIWebView。...列表上面是三个栏目按钮和轮播图片,向上滚动时,按钮和图片一起向上,按钮周边区域颜色渐变,然后在到指定位置时(这里是盖住导航栏之后)按钮停住不动,周边颜色也完全变成导航栏的颜色,列表数据还可以继续滚动。...其实也挺简单,重点是 contentInset这个属性。这个属性是UIScrollView的,用来指定内容边界,UITableView继承自UIScrollView,当然也含有这个属性。...这段距离用来放图片和栏目按钮。...(scrollView: UIScrollView) { let offsetY = -scrollView.contentOffset.y if offsetY < maxH {
顶部视图确实是直接作为self.view的子视图来添加的,但是列表的范围同样是覆盖整个屏幕,那么为了避免列表内容被顶部视图盖住,就要设置列表的contentoffset值。...= [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT)]; self.tableView.delegate...CGPointMake(0, -200)]; 我们的顶部视图要跟随列表滚动,就必须获知列表的滚动效果,这里我们在自定义的顶部视图类中加一个UIScrollView属性,在初始化的时候就将我们的列表赋给这个属性(UITableView...在处理方法中我们要做两件事,第一件事是让顶部视图的高度随着列表移动而移动,但是要控制列表最高移动到的位置TOP和最低移动到的位置BOTTOM,这其实就是顶部视图的低端对应的Y值。...示例工程 可以直接下载示例工程进行详细的了解和需要的修改:https://github.com/Cloudox/ScrollShowHeaderDemo 查看作者首页
首先在要将该界面分成两部分:一个ScrollHeader,一个UITableView。 ScrollHeader占据屏幕上方,高度为展开后的高度 UITableView占据整个屏幕,这样可以完全滚动。...为了让内容不被ScrollHeader遮盖,设置contentOffset属性即可 我这里用的ScrollHeader是作为独立的控件使用,与UITableView的HeaderView并无关系...之后将ScrollHeader分成两部分:topView和bottomView。...剩下的工作就是捕捉滑动状态,并且对滑动距离进行计算,移动topView和bottomView了。对于计算也不做过多说明了,因为没有几张草图也说不清。直接贴上代码,跟着代码算一下就知道怎么回事了。...willMoveToSuperview:(UIView *)newSuperview{ [self.headerScrollView addObserver:self forKeyPath:@"contentOffset
需求:取消UITableView的Footer自带的悬停效果,但不是隐藏,还是要在表格最后显示footer。...这种情况会有header和footer悬浮的效果。如果你想取消它,那么可以两种方案,实现scroll代理,修改style样式。...= 44; CGFloat offsetY = tableview.contentOffset.y; if (offsetY >= 0 && offsetY <= sectionHeaderHeight...) { tableview.contentInset = UIEdgeInsetsMake(-offsetY, 0, -sectionFooterHeight,...提醒 每个人的情况可能不太一样,笔者这里的验证结果可能只针对特定情况,读者自行根据实际情况参考和判断。也可以在评论区留言写下你工程背景和验证情况。 4.
苹果最强大的地方就在于其良好的UI展示,和UE体验。如果不会很好的使用UIScrollView,就等于丧失了苹果一般的法力。 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限。...并没有发生变化 缩放结束后 imageView 本身的 bounds 也没有发生变化 缩放结束后 imageView 的 center 发生了变化 1.2 UIScrollView常见的几个重要控件 UITableView...,contentSize, contenInset 2.1 contentOffset scrollView 通过修改 contentOffset 调整内部视图的坐标位置,从而给用户产生一种视觉上的滚动的效果...和普通的内边距作用相反,不是让内容向里面缩进。是在不改变原有的contentSize基础上,让scrollView中的内容向四周多滚动一些。...scrollView 通过修改 contentInset 调整内部和边缘的偏移 设置边距之后,初始没有效果,需要拖拽一下才有效果 可以通过设置 contentOffset 调整初始位置 contengInset
layer来创建圆形的点和 飞机图片。...ovalShapeLayer的strokeEnd和airplaneLayer的opacity。...func scrollViewDidScroll(_ scrollView: UIScrollView) { let offsetY = max(-(scrollView.contentOffset.y...这里改变了scrollView的contentInset来显示这个view,再为ovalShapeLayer添加上strokeStart和strokeEnd的动画,然后为airplaneLayer添加上绕圆的位置的变化以及图片角度的变化...func scrollViewDidScroll(_ scrollView: UIScrollView) { let offsetY = max(-(scrollView.contentOffset.y
UIScrollView 恐怕是所有 App 都绕不过去的类——尤其是它的子类 UITableView 和 UICollectionView。...基本理论 1.请说明并比较以下关键词:contentView,contentInset,contentSize,contentOffset。...contentInset 是指 contentView 与 UIScrollView 的边界。...UITableViewDelegate 用来处理 UITableView 的 UI 和交互:例如设置 UITableView 的 header 和 footer,点击、高亮某个 UITableViewCell...其中宽度一般情况我们是可以确定的,它取决于每个item的宽度,一行几个 item,以及 contentInset 值。高度我们可以先设定为 0,之后在 prepare() 里进行更新。
主要就是说自己定义一个view,弄成透明的,然后盖在TableView的上部和下部,这样就“隐藏”了。...super scrollViewDidScroll: scrollView]; } CGFloat sectionHeaderHeight = 50; if (scrollView.contentOffset.y...= 0) { scrollView.contentInset = UIEdgeInsetsMake...(-scrollView.contentOffset.y, 0, 0, 0); } else if (scrollView.contentOffset.y >= sectionHeaderHeight...) { scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0); } } 2.2.13
) -> Int { return 1; } func tableView(_ tableView: UITableView, numberOfRowsInSection section...{ return UIView(); } func tableView(_ tableView: UITableView, viewForFooterInSection section...) -> CGFloat { return 60; } func tableView(_ tableView: UITableView, cellForRowAt indexPath:...static func scrollViewSpaceToButtom(scrollView: UIScrollView)->CGFloat{ let offset = scrollView.contentOffset...bounds = scrollView.bounds; let size = scrollView.contentSize; let inset = scrollView.contentInset
之后,也就是说tableView reloadData之后,tableView的contentOffset发生了几次变化。...本文内容包括:集成了搜索的大标题栏、横向选项卡栏、Margins 和 Insets以及 UIScrollView和UITableView 的更新和功能更强大的滑动操作。...的scrollView,在iOS11中进行了一个很大的改变,不再通过scrollView的contentInset属性了,而是新增了一个属性:adjustedContentInset,下面的两张图的对比能够表示...estimateRowHeight属性,在iOS11的环境下就要注意了,因为开启Self-Sizing之后,tableView是使用estimateRowHeight属性的,这样就会造成contentSize和contentOffset...参考: 1、Updating Your App for iOS 11 - WWDC 2017 - Session 204 - iOS 2、iOS 8自动调整UITableView和UICollectionView
变化后执行的,异常动画发生在tableView reloadData之后,也就是说tableView reloadData之后,tableView的contentOffset发生了几次变化。...本文内容包括:集成了搜索的大标题栏、横向选项卡栏、Margins 和 Insets以及 UIScrollView和UITableView 的更新和功能更强大的滑动操作。 一....contentInset给其最顶层的viewController的scrollView,在iOS11中进行了一个很大的改变,不再通过scrollView的contentInset属性了,而是新增了一个属性...estimateRowHeight属性,在iOS11的环境下就要注意了,因为开启Self-Sizing之后,tableView是使用estimateRowHeight属性的,这样就会造成contentSize和contentOffset...因为不会缓存正确的行高,tableView reloadData的时候,会重新计算contentSize,就有可能会引起contentOffset的变化。
前言 很多APP都是滑动到底部时点击加载更多才会加载数据,这样用户体验就会有间断感,所以我们想用户看到最后时自动加载数据 怎么做呢 有人会说用一下的这个方法 - (void)tableView:(UITableView...然后根据滑动的高度做判断 看是否滑动到了底部 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGPoint offset = scrollView.contentOffset...= scrollView.bounds; CGSize size = scrollView.contentSize; UIEdgeInsets inset = scrollView.contentInset
重要的提示:在UIScrollView对象中,你不应该嵌入任何UIWebView和UITableView。...另外一个比较动态的选择是UIScrollView的另一个属性contentInset,contentInset增加你在contentsize中指定的内容能够滚动的上下左右区域数量contentInset.top...以及contentInset.buttom分别表示上面和下面的距离。 ...在滚轴视图中,有一个叫做ContentOffset的属性跟踪UIScrollView的具体位置,你能够自己获取和设置它,ContentOffset是你当前可视内容在滚轴视图边界的左上角那个点。...如图: 可以看出,ContentOffset内容中的那个点不是从contentInset的左上角开始的,而是内容的左上角,此时的ContentOffset是正值,但有时也是负值,如下图所示
// AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); // 控制手机振动 7,让 section header view 不悬停 当 UITableView...scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = 40; if (scrollView.contentOffset.y...=0) { scrollView.contentInset = UIEdgeInsetsMake...(-scrollView.contentOffset.y, 0, 0, 0); } else if (scrollView.contentOffset.y>=sectionHeaderHeight...) { scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0); } } 8,屏幕截图并保存
其顶部内边距contentInset.top等于header的最大高度-最小高度 即 可滑动的高度。...注:这样布局的原因是:不需要频繁的修改headerView和tabContainerView的frame,只需要修改他们的高度就行。卡顿效果能明显减少。...height: containerHeight - headerHeight)}----5、传递滑动回调将所有滑动回调都交由MOSubScrollExecutor处理:(把嵌套滑动规则集中在一个文件里,方便管理和复用...(to: 0.0)}func headerIsMaxState() -> Bool { return mainScrollView.contentInset.top.isEqual(to: abs...mainScrollViewDidScroll(_ scrollView: UIScrollView) { if self.mainScrollEnable { /// 需要重新布局,重新计算 headerView 和
ScrollView 的 size,保证 ScrollView 能完全渲染 CGRect frame = self.contentScrollView.frame; CGPoint contentOffset...= self.contentScrollView.contentOffset; UIEdgeInsets contentInset = self.contentScrollView.contentInset...// 恢复 scrollView 的 frame self.contentScrollView.frame = frame; self.contentScrollView.contentOffset...= contentOffset; self.contentScrollView.contentInset = contentInset; // 回调结果 completionHandler
领取专属 10元无门槛券
手把手带您无忧上云