ios - 删除 UITableView 中单元格前的空白

标签 ios objective-c uitableview ios7

我目前正在尝试将 UITableView 放在不同的位置,而不是放在我的 View Controller 的顶部。话虽如此,它正在尝试在顶部添加标题以说明导航栏,但这不是必需的,因为我的 Controller 顶部没有。

如果我将 UITableView 的左上角放在我希望单元格所在的位置,它不会将单元格放在那里:

现在,如果我只是向上移动表格 View 以使单元格位于正确的位置,我会遇到不同的问题 - 滚动时单元格可以向上移动到那里(这是用我的手指在导航 Controller 上方):

当我放手时,是的 - 单元格将位于搜索栏的正下方,但这显然是一个问题,如何将它们置于其上方。

我该怎么做呢?有没有更简单的方法?

最佳答案

向下滚动时,UITableView 的单元格是否显示在空白处?

如果是这样,那么问题可能是添加到 UITableView 的插图,因为您的 View 中有导航 Controller 。 插图被添加到表格 View 中,以便在未发生滚动时将内容放置在导航栏下方。滚动表格时,内容会滚动并显示在透明导航栏下。当然,只有当表格 View 直接在导航栏下方开始时才需要这种行为,这里不是这种情况。

另外需要注意的是,如果它是 UIScrollView 或它的后代(例如 UITableViewUICollectionView)。如果您的 View 层次结构包含多个 ScrollView ,automaticallyAdjustsScrollViewInsets 将仅对第一个进行调整。

以下是更改此行为的方法:

a) 界面生成器

  • 选择 View Controller
  • 打开属性检查器
  • 在 IB 的属性检查器(选择 View Controller 时)中有一个名为“调整 ScrollView 插图”的属性,默认情况下是打开的。取消选中此选项:


    (图片由 Dheeraj D 提供)

我不确定哪个 Xcode 版本引入了这个选项(在发行说明中没有发现),但它至少在 5.1.1 版本中可用。

编辑:为避免混淆,这是评论中提到的第三个选项

b) 以编程方式

将此添加到即 viewDidLoad(归功于 Slavco Petkovski 的回答和 Cris R 的评论)

// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;

// Swift
self.automaticallyAdjustsScrollViewInsets = false

c) 这可能与老学生有关

您可以通过添加来解决此问题

tableView.contentInset = UIEdgeInsetsZero

//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero

或者如果你使用的是 IB 并且导航栏不透明(从截图中看不出来)

  • 选择 View Controller
  • 打开属性检查器
  • 在 View Controller 选项“Extend Edges”部分取消选择“Under Top Bars”

关于ios - 删除 UITableView 中单元格前的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18906919/

相关文章:

ios - 第二次单击自定义选项卡栏时滚动到 View 顶部 : Objective-C

c - iOS 中标志结构的用途是什么?

ios - UINavigationController 使用 SWRevealViewController 阻止 UITabBar

ios - Objective C 字符串比较。奇怪的行为?

ios - 多次调用 estimatedHeightForRowAtIndexPath 导致不稳定的 uitableview

ios - 如何在相同的 "didSelectRowAtIndexPath"方法中再次调用 "didSelectRowAtIndexPath"方法

iphone - 如何使用 Obj C 检测 iPhone 与 iPhone 3G

ios - 简单的 UITableView 内存泄漏

ios - 在 Swift 2 中将 JSON 转换为数组

ios - iOS block 参数是否允许以某种方式成为已定义类型的特定子类