Swift:修改UITableViewController中UITableView与控制器视图的边距
嗨,这个问题我之前做项目的时候也踩过坑!UITableViewController里自带的tableView和导航栏之间的那点间距,基本都是系统默认的滚动视图内边距适配搞的鬼,下面给你两种靠谱的解决方式,不管是用Storyboard可视化操作还是写代码都能搞定:
方法一:通过Storyboard移除间距
- 选中你的UITableViewController,打开右侧的Attributes Inspector(属性检查器),找到「Adjust Scroll View Insets」选项,取消它的勾选。这是最直接的方式,取消后系统就不会自动给tableView添加顶部内边距了。
- 如果上面的操作没生效,可以检查导航栏的半透明属性:选中导航栏,在Attributes Inspector里找到「Translucent」选项,要是它处于勾选状态,系统会自动为tableView预留顶部空间。你可以取消这个勾选来消除间距,但这样导航栏会变成不透明样式;如果需要保留导航栏半透明效果,建议用下面的代码方法。
方法二:通过代码移除/修改间距
根据iOS版本的不同,对应的API有所区别,分两种情况:
iOS 11及以上版本
在UITableViewController的viewDidLoad方法中添加以下代码,强制关闭系统自动调整内边距的行为:
override func viewDidLoad() { super.viewDidLoad() // 关闭系统自动调整内边距 tableView.contentInsetAdjustmentBehavior = .never }
如果是Objective-C项目:
- (void)viewDidLoad { [super viewDidLoad]; self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; }
iOS 10及以下版本
使用automaticallyAdjustsScrollViewInsets属性来关闭自动适配:
override func viewDidLoad() { super.viewDidLoad() self.automaticallyAdjustsScrollViewInsets = false }
Objective-C版本:
- (void)viewDidLoad { [super viewDidLoad]; self.automaticallyAdjustsScrollViewInsets = NO; }
自定义间距(而非完全移除)
如果你不想完全消除间距,只想调整它的大小,可以手动设置tableView的contentInset属性,比如把顶部间距改成10pt:
override func viewDidLoad() { super.viewDidLoad() // 自定义顶部间距为10pt tableView.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0) }
内容的提问来源于stack exchange,提问作者Michał Ziobro
相关产品推荐
相关产品推荐

