我目前正在尝试将UITableView
放在不同的位置,而不是放在我的视图控制器的顶部。有了这个说,它试图在顶部添加标题来考虑导航栏,但这不是必需的,因为我没有在我的控制器的顶部。
如果我把UITableView
的左上角放在我想要细胞的位置,它就不会将细胞放在那里:
现在,如果我只是向上移动表视图以使单元格位于正确的位置,我会遇到一个不同的问题 - 滚动时单元格可以移动到那里(这是我的手指在导航控制器上方):
当我放手时,是的 - 单元格将在搜索栏的正下方,但这显然是一个问题,如何将它们带到它上面。
我该怎么做呢?有没有更简单的方法?
当你向下滚动时,UITableView
的细胞是否显示在空白区域?
如果是这样,那么问题可能是由于您在视图中使用的导航控制器而添加到UITableView
的插入。将插入内容添加到表视图中,以便在未进行滚动时将内容放置在导航栏下方。滚动表格时,内容会滚动并显示在透明导航栏下。当然,只有当表视图直接在导航栏下面开始时才需要这种行为,这不是这里的情况。
另外需要注意的是,如果它是UIScrollView
或它的后代(例如UITableView
和UICollectionView
),iOS仅为视图层次结构中的第一个视图调整内容插入。如果视图层次结构包含多个滚动视图,则automaticallyAdjustsScrollViewInsets
将仅对第一个进行调整。
以下是更改此行为的方法:
a)Interface Builder
我不确定哪个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并且导航栏不透明(无法从屏幕截图中看出)
检查storyboard或xib中的tableview框架。我默认有一个y位置值,因此是bug
在我的应用程序中,我也经历过这样的问题。我设置了tableView零的上边缘插图。还试过为false
设置automaticallyAdjustsScrollViewInsets
。但没有奏效。
最后我得到了一个有效的解决方我不知道这是正确的方法。但实施heightForHeaderInSection
委托方法对我有用。您必须返回一个非零值才能工作(返回零将显示与以前相同的空间)。
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0.1
}
好吧,当我将原型单元格从菜单拖到表格视图中时,问题就出现了。所以我删除了它,只是在表视图检查器属性中将原型单元格设置为1
我正在以编程方式执行此操作,并且在添加所有其他子视图后,我只是将addSubview(tableView)移动到底部,它解决了我的问题!
不知道为什么这只出现在设备而不是我的模拟器上,但无论哪种方式,至少有一个简单的解决方案!
只要UITableView不是视图控制器的第一个子视图,就不会出现空白区域。
解决方案:添加隐藏/清除视图对象(视图,标签,按钮等)作为视图控制器的第一个子视图(与UITableView处于同一级别但在它之前)。
在2017年,对我有用的只是这一行
navigationController?.navigationBar.isTranslucent = false
我不知道为什么会影响它。也许有人可以解释。但我很确定这是大多数人想要的答案。
在iOS 11及更高版本中,apple已更改属性以调整内容插入。使用contentInsetAdjustmentBehavior
并设置.never
以移除UICollectionView
,UIScrollView
,UITableView
上方的额外空间。
if #available(iOS 11.0, *) {
// For scroll view
self.scrollView.contentInsetAdjustmentBehavior = .never
// For collection view
self.collectionView.contentInsetAdjustmentBehavior = .never
// For table view
self.tableView.contentInsetAdjustmentBehavior = .never
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
我希望这能帮到您。
UIView可以插入表格的顶部和底部(拖放)。将其属性设置为透明,高度为1像素。这是为了消除单元格前面的额外填充。
我也有这个问题,tableView不是层次结构中的最后一个视图。在我的情况下,我有一个上面的视图(即使它们没有相互重叠),所以我将它拖动到层次结构中的tableView上方,并且这样做了。
我有同样的问题,我很确定我在那里有一个UIView。只需复制整个表格视图,删除它并再次粘贴它就可以修复它。
我刚刚找到了解决方案。
只需选择tableview和clic Editor - > Arrange - > Send to Front
它对我有用,希望它能帮到你们所有人。
在我的情况下,我正在使用ContainerViewController并将UITableViewController放入其中。删除ContainerViewController后。问题消失了。
Xcode 8 bug ...
如果您的Storyboard UITableView样式设置为Plain,请先尝试此操作。
将表的样式设置为Grouped,然后再返回Plain。这删除了我的应用程序在我的UITableView头部的空间。
在我的情况下,我使用的是容器视图。(主视图 - >容器视图 - > UITableView)
我认为,顶部的额外空间就像设备通知栏的空间(显示时间的地方,电池)。我真的这么做,这不是假设。
我做的是来自UI Builder:
您可以将此代码用于正在创建表的viewDidLoad或viewDidAppear:
// 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];
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.
https://i.stack.imgur.com/vRNfV.png
在故事板中设置ViewController的扩展边缘,以便取消选中underTopBar
属性。
有同样的问题。我通过将以下内容添加到viewDidLoad来解决它。
self.extendedLayoutIncludesOpaqueBars = true
检查
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
在故事板中选择tableview并确保样式设置为“Plain”,而不是“Grouped”。您可以在属性“检查器”选项卡中找到此设置。
在我的案例中,我在视图层次结构中的UITableView下有一个UILabel。
我把它“向前”移动,出现了空白区域。不知道为什么,但它的工作原理如下,如果在tableView下有任何东西,它会隐藏空白区域。
您还可以尝试在故事板上的视图控制器检查器上检查/取消选中“调整滚动视图插入”。
以上没有人帮助我。但这样做确实有帮助:
self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)
而不是'-64',您可以根据导航栏的高度放置任何其他数字。
有可能预先添加UIRefreshControl
。我有这样的代码这个问题:
self.refreshControl = [[UIRefreshControl alloc] init];{
[self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
initWithString:@"Your string"]];
[self.refreshControl addTarget:self
action:@selector(updateScreen)
forControlEvents:UIControlEventValueChanged];
}
如你所见,我在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;
}
我不能肯定地说,但看起来你有一个额外的UIView卡在Prototype Cells开始的地方和UITableView的顶部之间。如果您删除我添加的文本/行,我的图像看起来与您的图像完全一样。
我仍然不确定是什么原因造成顶部的额外空间,但我发现用空格删除UITableView并用新的替换它占用了空间。
我一定是在那里意外拖了一个UIView,但我无法选择它所以我无法删除。
如果您在iOS 11上执行此操作,则selfAdjustsScrollViewInsets将无法使用,因为它已弃用,以下代码适用于我,根据此帖子中的答案:https://stackoverflow.com/a/44391269/5476481
if #available(iOS 11.0, *) {
tblView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
希望这可以帮助。