You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:20:39