转自:https://www.jianshu.com/p/4cdcfb97704f
设置有导航控制器后,ScrollView和TableView的ContentInset默认偏移64,如果不希望系统自动偏移,可以通过以下三种方式取消
- 在导航控制器下将Translucent穿透/透明效果取消
self.navigationBar.translucent = NO;
- 当前控制器下将Adjusts Scroll View Inset设置为No
self.automaticallyAdjustsScrollViewInsets = NO;
- 直接修改ScrollView或TableView的ContentInset属性
self.NaigationScrollerView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);
模拟
@interface ViewController () <UITableViewDataSource,UITableViewDelegate>
@property (nonatomic,weak) UITableView *tableView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UITableView *tableview = [[UITableView alloc]init];
[self.view addSubview:tableview];
tableview.frame = [UIScreen mainScreen].bounds;
self.view.backgroundColor = [UIColor redColor];
self.tableView = tableview;
[tableview registerClass:[UITableViewCell class] forCellReuseIdentifier:@"id"];
tableview.rowHeight = 100;
tableview.dataSource = self;
tableview.delegate = self;
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
// [self.tableView setContentOffset:CGPointMake(0, -64) animated:YES];
self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 5;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"id"];
cell.backgroundColor = [self randomColour];
return cell;
}
- (UIColor *)randomColour{
CGFloat red = arc4random() % 256 / 255.0;
CGFloat green = arc4random() % 256 / 255.0;
CGFloat blue = arc4random() % 256 / 255.0;
return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
NSLog(@"%f",scrollView.contentOffset.y);
}
@end
如果只是设置了TableView的ContentOffSet偏移 - 64,那么首次显示TableView的时候,可以看到TableView向下偏移了64的距离
但是一滚动TableView松手时,TableView的偏移量会归零
这时如果存在导航条,TableView就会被遮挡
所以给TableView设置一个上方的内边距,就可以解决滚动松手后被遮挡的问题
之所以会这样,大致是因为,当我们添加一个控件,Original为(0,0)时,同时使用了导航栏,这样默认就会遮挡控件的正常显示,因此在iOS 7后,苹果为我们默认进行了处理(控制器会检查firstObject是否属于UIScrollView,如果是,就会进行调整,否则不进行处理),而当我们将导航条隐藏后,系统就不会进行干预了,若开发中不需要系统干预,就可以通过上述三种方式来解决这个问题
相关推荐
scrollView 实现一个手势识别的协议,同时响应滚动事件,分别在底层容器和上层业务中实现滚动视图的代理方法 func scrollViewDidScroll(_ scrollView: UIScrollView),分别控制他们的可滚动状态和偏移量则能实现目的...
本项目“ios-scrollView复用及tableView预加载.zip”着重探讨了如何优化滚动视图的性能,特别是针对题库类应用,通过复用机制和预加载策略来提升用户体验。 一、ScrollView复用机制 1. 复用池:在iOS中,...
在iOS开发中,TableView和ScrollView是两种常用的UI组件,它们各自有着特定的使用场景。当需求涉及复杂的滚动交互时,可能会需要将TableView与ScrollView混合使用,以实现更丰富的用户界面和交互体验。本文将深入...
"iOS TableView下拉图片放大"这一功能通常是为Header View设计的,当用户下拉表格时,位于顶部的图片会按比例放大,给予用户一个视觉反馈,增强交互体验。本文将详细介绍如何实现这个效果。 首先,我们需要了解...
5. 滚动处理:在 `- (void)scrollViewDidScroll:(UIScrollView *)scrollView` 回调中,根据tableView和内部scrollView的偏移量调整子视图的可见性,实现平滑滚动。 通过以上步骤,我们能够实现在横向滚动时利用...
6. **注意性能**:嵌套ScrollView和TableView可能导致性能问题,尤其是当TableView的数据源较大时。因此,确保正确实现`numberOfRows(inSection:)`和`cellForRowAt:`方法,以及使用dequeueReusableCell以复用cell,...
这里,我们首先检查哪个视图正在滚动,如果是tableView,我们就更新scrollView的内容偏移量(contentOffset)。通过这种方式,指示条的位置会随着tableView的滚动而改变。 然而,这还不足以完全实现联动效果,因为...
它是iOS提供的一个控制器,用于管理一系列通过堆栈方式组织的UIViewController。在这个案例中,可能包含两个UITableView分别代表不同的内容页面,用户可以在这些页面之间通过UINavigationController的push和pop操作...
`ios-记录tableView滚动的位置.zip`这个资源可能包含了一个示例项目,演示了如何在用户退出应用或切换页面后,再次打开时恢复UITableView的滚动位置。这个功能提高了用户体验,因为用户不必手动滚动到他们之前查看的...
7. **回弹动画**:当用户松开手指后,header view应该有一个回弹的动画,恢复到原始状态。你可以利用Core Animation或者CAKeyframeAnimation来实现这个效果。 8. **优化性能**:注意在处理滚动事件时,避免进行过于...
在iOS应用开发中,TableView(表格视图)是一种常见的用户界面元素,用于展示有序的数据集合。在这种场景下,“ios-tableView悬浮菜单.zip”很可能是包含一个实现或演示了如何在TableView中创建悬浮菜单的示例代码或...
1. **设置代理和滚动监听**:确保你的控制器是`UIScrollViewDelegate`的遵循者,并在初始化时设置滚动视图(如UITableView)的代理为自身。这样,当用户滑动时,`scrollViewDidScroll:`方法会被调用。 ```swift ...
在iOS开发中,构建用户...总之,这个示例项目涵盖了ScrollView和TableView的使用,以及视图动画的应用,这些都是iOS开发中不可或缺的基础技能。通过实践和理解这些知识点,开发者能够创建出更加丰富和动态的用户界面。
在iOS应用开发中,TableView是一种常用的UI组件,用于展示列表数据。当用户下拉一个TableView时,有时我们希望实现一种头部视图放大效果,以增强交互性和视觉吸引力。本教程将详细讲解如何在Swift中实现这种"iOS-...
在iOS开发中,实现"UITableView下拉的时候头部放大,向上滑动到一定距离后头部固定不动"的效果,通常涉及到自定义UITableViewHeaderFooterView和手势识别技术。这种效果常见于许多应用的启动页面或者主界面,增加了...
6. 设置ScrollView内容偏移:当用户滚动时,ScrollView需要根据当前显示的TableView进行内容偏移调整,以保持视觉连贯性。 7. 处理滚动事件:监听ScrollView的滚动事件,以便在用户滚动到边界时切换到下一个...
为了解决这个问题,开发者通常会实现一种机制,使得`TableView`或`ScrollView`能够自动上移到键盘上方,以便用户能清晰看到正在输入的`TextField`。 在iOS中,我们可以利用`UIKeyboardWillShowNotification`和`...
5. **自定义UIScrollViewDelegate**:如果UITableView嵌套在UIScrollView中,可以直接监听ScrollView的滚动事件,根据滚动偏移量改变header的frame。 在`TabViewHeader`这个项目中,开发者可能已经实现了上述的一种...
这个方法是视图控制器生命周期的一部分,开发者可以利用它来执行一些预处理,例如设置初始状态或者进行布局调整。在`headerView.zip`这个压缩包中,我们可以推测它可能包含了一个关于自定义头部视图(header view)...