0
点赞
收藏
分享

微信扫一扫

(转)[IOS]iOS 7后导航控制器导致ScrollView和TableView偏移

设置有导航控制器后,ScrollView和TableView的ContentInset默认偏移64,如果不希望系统自动偏移,可以通过以下三种方式取消

  1. 在导航控制器下将Translucent穿透/透明效果取消

self.navigationBar.translucent = NO;

  1. 当前控制器下将Adjusts Scroll View Inset设置为No

self.automaticallyAdjustsScrollViewInsets = NO;

  1. 直接修改ScrollView或TableView的ContentInset属性

self.NaigationScrollerView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

模拟

@interface ViewController () <UITableViewDataSource,UITableViewDelegate>
@property (nonatomic,weak) UITableView
@end

@implementation ViewController

- (void)viewDidLoad {
super

UITableView *tableview = [[UITableView
self.view addSubview:tableview];
UIScreen
self.view.backgroundColor = [UIColor
self.tableView = tableview;

UITableViewCell class] forCellReuseIdentifier:@"id"];
100;
self;
self;

}
- (void)viewDidAppear:(BOOL)animated{
super
// [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

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"id"];
self
return
}
- (UIColor
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

NSLog(@"%f",scrollView.contentOffset.y);
}
@end

如果只是设置了TableView的ContentOffSet偏移 - 64,那么首次显示TableView的时候,可以看到TableView向下偏移了64的距离

(转)[IOS]iOS 7后导航控制器导致ScrollView和TableView偏移_ico

但是一滚动TableView松手时,TableView的偏移量会归零

(转)[IOS]iOS 7后导航控制器导致ScrollView和TableView偏移_控件_02



这时如果存在导航条,TableView就会被遮挡

所以给TableView设置一个上方的内边距,就可以解决滚动松手后被遮挡的问题

之所以会这样,大致是因为,当我们添加一个控件,Original为(0,0)时,同时使用了导航栏,这样默认就会遮挡控件的正常显示,因此在iOS 7后,苹果为我们默认进行了处理(控制器会检查firstObject是否属于UIScrollView,如果是,就会进行调整,否则不进行处理),而当我们将导航条隐藏后,系统就不会进行干预了,若开发中不需要系统干预,就可以通过上述三种方式来解决这个问题

举报

相关推荐

0 条评论