在UITableView中删除单元格之前的空格

het*_*lek 165 objective-c uitableview ios ios7

我目前正在尝试将其放在UITableView不同的位置,而不是放在视图控制器的顶部.有了这个说,它试图在顶部添加标题来考虑导航栏,但这不是必需的,因为我没有在我的控制器的顶部.

如果我把UITableView我想要细胞的左上角放在那里,它就不会把细胞放在那里:

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

当我放手时,是的 - 单元格将在搜索栏的正下方,但这显然是一个问题,如何将它们带到它上面.

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

lek*_*ksi 372

UITableView向下滚动时,在空白区域显示节目的单元格吗?

如果是这样,那么问题可能是UITableView由于您在视图中使用的导航控制器而添加到插入的插图.将插入内容添加到表视图中,以便在未进行滚动时将内容放置在导航栏下方.滚动表格时,内容会滚动并显示在透明导航栏下.当然,只有当表视图直接在导航栏下面开始时才需要这种行为,这不是这里的情况.

另一件需要注意的事情是iOS调整内容插入仅适用于视图层次结构中的第一个视图(如果它是UIScrollView或它的后代)(例如UITableViewUICollectionView).如果视图层次结构包含多个滚动视图,automaticallyAdjustsScrollViewInsets则仅对第一个进行调整.

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

a)Interface Builder

  • 选择视图控制器
  • 打开属性检查器
  • 在IB的属性检查器中(当选择了视图控制器时),有一个名为"调整滚动视图插入"的属性,默认情况下处于打开状态.取消选中此选项:


    (图片由Dheeraj D提供)

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

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

b)以编程方式

将此添加到ie viewDidLoad(Slavco Petkovski的回答和Cris R的评论)

// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;

// Swift
self.automaticallyAdjustsScrollViewInsets = false
Run Code Online (Sandbox Code Playgroud)

c)这可能与老学生有关

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

tableView.contentInset = UIEdgeInsetsZero

//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用IB并且导航栏不透明(无法从屏幕截图中看出)

  • 选择视图控制器
  • 打开属性检查器
  • 在"视图控制器"选项"扩展边缘"部分中,取消选择"在顶部条形图下"

  • 第三个选项:取消选择"调整滚动视图插图" - 像魅力一样工作.谢谢lekksi! (8认同)
  • 在UIView上取消选择“顶部栏下面”对我来说很好。谢谢。 (2认同)
  • self.automaticallyAdjustsScrollViewInsets = false在Swift工作"de pelos"! (2认同)

小智 70

我有同样的问题,我很确定我在那里有一个UIView.只需复制整个表格视图,删除它并再次粘贴它就可以修复它.

  • 这真的很奇怪.这解决了这个问题.什么时候发生这种情况? (7认同)
  • 据我所知,只有当滚动视图是视图控制器视图层次结构中的第一个子视图时,滚动视图内容插入才会自动调整(如果automaticAdjustsScrollViewInsets = YES,默认情况下是这样).我的猜测是这个解决方案有效,因为在复制粘贴表视图后,它不再是视图层次结构中的第一个视图. (3认同)

net*_*000 37

在故事板中选择tableview并确保样式设置为"Plain",而不是"Grouped".您可以在属性"检查器"选项卡中找到此设置.


And*_*ryn 9

在我的案例中,我在视图层次结构中的UITableView下有一个UILabel.

我把它"向前"移动,出现了空白区域.不知道为什么,但它的工作原理如下,如果在tableView下有任何东西,它会隐藏空白区域.

您还可以尝试在故事板上的视图控制器检查器上检查/取消选中"调整滚动视图插入".

在此输入图像描述

  • 我有一个分组的UITableView并取消选中"Adjust Scroll View Insets". (2认同)

aka*_*ity 5

有可能是预先添加的UIRefreshControl。我有这样的代码问题:

self.refreshControl = [[UIRefreshControl alloc] init];{
    [self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
                                             initWithString:@"Your string"]];
    [self.refreshControl addTarget:self
                            action:@selector(updateScreen)
                  forControlEvents:UIControlEventValueChanged];

}
Run Code Online (Sandbox Code Playgroud)

如你所见,我self.refreshController立即设置init

但是,如果您在设置refreshControl后进行设置,则顶部空间不会干扰您。

UIRefreshControl *refreshControl  = [[UIRefreshControl alloc] init];{
    [self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
                                             initWithString:@"Your String"]];
    [self.refreshControl addTarget:self
                            action:@selector(updateScreen)
                  forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;
}
Run Code Online (Sandbox Code Playgroud)


Tun*_*Fam 5

以上没有人帮助我.但这样做确实有帮助:

self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

而不是'-64',您可以根据导航栏的高度放置任何其他数字.


Jac*_*nig 5

如果您在 iOS 11 上执行此操作,则automatedAdjustsScrollViewInsets 将无法工作,因为它已被弃用,以下代码根据本文中的答案对我有用:https : //stackoverflow.com/a/44391269/5476481

        if #available(iOS 11.0, *) {
            tblView.contentInsetAdjustmentBehavior = .never
        } else {
            automaticallyAdjustsScrollViewInsets = false
        }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


Viv*_*vek 5

雨燕5

尝试删除tableHeaderViewtableFooterView

var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tblView.tableHeaderView = UIView(frame: frame)
tblView.tableFooterView = UIView(frame: frame)
Run Code Online (Sandbox Code Playgroud)