UIViewController 自动调整 TableView ContentInset失败问题

  1. 背景介绍

    开发过程中经常会碰到ViewController里面放一个 TableView 这样的布局。ios7之后,导航不再占用视图的尺寸,iOS默认 edgesForExtendedLayout 为 UIRectEdgeAll 。

    那也就是说默认情况下是视图是可以全屏布局的。point(0,0) 变成了整个屏幕的最左上角,而不是从导航下面开始算。

    当然你也可以设置edgesForExtendedLayout 为其他枚举值,改变View 的边缘延伸区域。

    那么问题来了......

  2. 问题描述

    拖一个tableview 铺满VC的View,显示出来会被导航挡住64像素的高度吗?

    答案是正常情况下不会, 因为VC 具有 AdjustScrollViewInset属性,默认就是会自动调整子scrollview的contentInset, 让其显示内容不被NavigationBar 及 tabbar 遮挡。

    这是正常情况,妹子显示完整。但是这只是你的tableview作为最底层 subview 的情况

    如果tableview 不是作为View 的第一层子视图会怎样?

    在View和tableview 之间加了个view, 妹子的头被遮住了,发现AdjustScrollViewInset属性 马上失效了,勾选了也没用。

  3. 解决方案

    看来AdjustScrollViewInset属性有效也是有前提的,必须是scorllview 作为 VC 的最底层视图,当然你如果是tableviewController 不会出现这种问题。

    有多种办法可以解决这个问题

    1、让tableview 重新回到最底层,代码布局的可以 sendToBack

2、 手动调整tableview的 inset.top

参考:http://stackoverflow.com/a/19129292/4408376

时间: 2024-10-29 19:13:33

UIViewController 自动调整 TableView ContentInset失败问题的相关文章

一个控制器(UIViewController)中需要管理多个tableView,addChildViewController注意事项

有时候,一个控制器(UIViewController)中需要管理多个tableView,我们需要将多个控制器加入到主控制器中去.使用UIViewController的addChildViewController方法即可.但是这时可能会在tableView的位置上出现问题: 1.UIViewController的automaticallyAdjustsScrollViewInsets属性是会根据所在界面的status bar,navigationbar,tabbar的高度,自动调整scrollVi

IOS7 TableView适配

ios7下的app都是全屏的,意思就是所有控制器的view默认都是从屏幕的(0,0)开始. 为了达到全屏效果的app,官方为UIviewController增加了几个属性: 1 @property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll 2 @property(nonatomic,assign) BOOL extendedLayo

点击状态栏让tableview回到顶部最简单的方法

先看官方解释,如图: 官方说一个屏幕中只能允许一个scrollsTop = YES;不然就不能滚回顶部了!! 最简单的方法: 那么就让一个屏幕中只存在一个scrollsTop = YES就可以了, 其他的scrollsTop = NO;那么就可以默认点击状态栏tableview回到顶部! 完毕!!! ************************************************************************************************* 附

TableView下拉表头放大 导航栏颜色透明度随着TableView偏移量渐变

TableView 下拉表头放大 导航栏颜色透明度随着TableView偏移量渐变 用storeboard 布局,之前尝试在storeboard中设置tableview的表头,但是那样弄出来的效果 表头不贴着上面,后来改成storeboard和代码 结合,最后实现的这个效果 下载链接: https://github.com/ShaoWenLe/TableViewThe-drop-down-amplification.git import UIKit let KScreen_Width = UIS

自定义刷新tableView

// //  LSTWholeTableController.m //  BUDEJIE // //  Created by admin on 16/8/17. //  Copyright © 2016年 ibokan. All rights reserved. // #import "LSTWholeTableController.h" #import "AFNetworking.h" #import "LSTWholeModal.h" #im

status bar、navigationBar、tableView吸顶view设置

1. 隐藏navigationBar self.navigationController.navigationBar.hidden = YES; 2. status bar设置 -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; } -(void)v

iOS tableView不让头部和尾部跟随

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { UITableView *tableview = (UITableView *)scrollView; CGFloat sectionHeaderHeight = AutoWHGetHeight(50); CGFloat sectionFooterHeight = AutoWHGetHeight(0); CGFloat offsetY = tableview.contentOffset

iOS 使用TableView实现下拉放大

第一步: 布置需要放大的TopView: 1. 创建TopView UIImageView *topView = [[UIImageView alloc] init]; 2. 设置图片 UIImage *image = [UIImage imageNamed:@"Big.jpg"]; topView.image = image; 3. 设置TopView的初始位置及内容模式 // 初始位置 topView.frame = CGRectMake(0, -TopViewH, ScreenW

Swift - 实现tableView单选系统样式

// 实现tableView单选 import UIKit class ViewController: UIViewController { var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() tableView = UITableView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScre