Answers:
UITableView
向下滚动时,显示的单元格是否显示在空白区域?
如果是这样,则问题可能出在添加到插图中的插图上,这是UITableView
因为您的视图中具有导航控制器。将插图添加到表格视图中,以便在未发生滚动时将内容放置在导航栏下方。滚动表时,内容将滚动并显示在透明导航栏下。仅当表视图直接在导航栏下开始时才需要这种行为,而在这里情况并非如此。
需要注意的另一件事是,iOS仅针对视图层次结构中的第一个视图(如果是UIScrollView
或它的后代)(例如UITableView
和UICollectionView
)来调整内容插入。如果您的视图层次结构包含多个滚动视图,automaticallyAdjustsScrollViewInsets
则将仅对第一个进行调整。
更改此行为的方法如下:
a)界面生成器
IB的属性检查器中有一个名为“调整滚动视图插图”的属性(当选择了视图控制器时),该属性默认情况下处于启用状态。取消选中此选项:
(图片由Dheeraj D提供)
我不确定哪个Xcode版本引入了此选项(在发行说明中找不到它),但是至少在5.1.1版本中可用。
编辑:为避免混淆,这是评论中提到的第三个选项
b)以编程方式
将此添加到ie中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,并且导航栏不是透明的(无法从屏幕截图中分辨出)
我也遇到了同样的问题,我很确定自己在某一时刻有一个UIView。只需复制整个表视图,删除它,然后再次粘贴就可以为我修复它。
在情节提要中选择表格视图,并确保将样式设置为“普通”,而不是“分组”。您可以在属性“检查器”选项卡中找到此设置。
在我的案例中,我在视图层次结构的UITableView下有一个UILabel。
我将其“向前”移动,并出现空白。不知道为什么,但是它是这样工作的,如果tableView下有任何东西,它将隐藏空白。
您也可以尝试在情节提要上的视图控制器检查器上检查/取消选中“调整滚动视图插图”。
可能有预添加的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;
}
如果您在iOS 11上执行此操作,则由于不推荐使用autoAdjustsScrollViewInsets,因此它不起作用,根据本文中的答案,以下代码对我有用:https : //stackoverflow.com/a/44391269/5476481
if #available(iOS 11.0, *) {
tblView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
希望这可以帮助。
在我的应用程序中,我也遇到过这样的问题。我已经将tableView的上边缘插图设置为零。也尝试设置false
为automaticallyAdjustsScrollViewInsets
。但是没有用。
终于我有了一个可行的解决方案。我不知道这是正确的方法。但是实现heightForHeaderInSection
委托方法对我有用。您必须返回一个非零值才能工作(返回零将显示与以前相同的空间)。
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0.1
}
在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
}
我希望这能帮到您。
对我来说,当我从菜单中将原型单元拖动到表格视图中时,便出现了问题。所以我删除了它,只是在表视图检查器属性中将原型单元设置为1
我刚刚找到了解决方案。
只需选择tableview和clic编辑器->安排->发送到前端
它为我工作,希望对您有帮助。
就我而言,我正在使用ContainerViewController并将UITableViewController放入其中。删除ContainerViewController之后。问题消失了。
就我而言,我使用的是容器视图。(主视图->容器视图-> 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
有同样的问题。我通过将以下内容添加到viewDidLoad中解决了该问题。
self.extendedLayoutIncludesOpaqueBars = true