我已经将一个普通的简 UITableView 拖到 iOS 7 中的 UIViewController 上。
现在在第一个单元格开始之前有一个垂直的空间偏移量。我该如何摆脱它?我希望第一行更接近 UITableView 实际开始的顶部边缘。我没有要求大偏移量是吗?
有任何想法吗?
我已经将一个普通的简 UITableView 拖到 iOS 7 中的 UIViewController 上。
现在在第一个单元格开始之前有一个垂直的空间偏移量。我该如何摆脱它?我希望第一行更接近 UITableView 实际开始的顶部边缘。我没有要求大偏移量是吗?
有任何想法吗?
UIViewController的新iOS 7实现有一组新选项,允许开发人员选择系统是否会自动为UIScrollView、UITableView和派生添加插图。
要禁用此行为,请取消选中 InterfaceBuilder 中所有您想要的 UIViewControllers 的这些框,在UIViewController选定的对象检查器上:
更多细节:
默认情况下,表格视图控制器会将内容填充到导航栏下方,以便您可以滚动其下方的内容并在导航栏/工具栏下方以模糊状态查看它。
看起来您将其定位在 44(可能是 64)px 以将其从导航栏下方移出,但它已经补偿了这一点,因此您获得了很大的差距。
转到 IB 中的故事板/xib 并取消选中导航栏内容下的节目内容。
如果您不希望自动调整滚动视图的内容插入,请将 automaticallyAdjustsScrollViewInsets 设置为 NO。(automaticAdjustsScrollViewInsets 的默认值为 YES。)
self.automaticallyAdjustsScrollViewInsets = NO;
我遇到了类似的问题,在关闭 viewController 后,我的 tableView 的 contentOffset 更改为 (0, -64)。
我的解决方案有点奇怪,我尝试了所有其他答案但没有成功,解决我的问题的唯一方法是在 .xib 的控件树中切换 tableView 位置
它是父视图中的第一个控件,如下所示:
我在 ImageView 之后移动了 tableView 并且它起作用了:
似乎将表格视图放在第一个位置会引起麻烦,将表格视图移动到另一个位置可以解决问题。
PD我没有使用自动布局也没有故事板
希望这可以帮助某人!
它解决了我的类似问题:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}
尝试使用这个
tableView.separatorInset = UIEdgeInsetsZero;
显然,如果你支持低于 iOS7 的任何东西,你需要确保对象在调用它之前响应这个选择器。
说真的,改变contentOffset
不是解决办法。您只是在修补问题而不是修复原因。我一直面临同样的问题,结果发现分组的 tableViews 在顶部有一个填充。在我的情况下,将类型设置为普通就可以了。
希望它能为某人节省几分钟。Z。
在 iOS 9 中,此页面上的其他答案均不适合我(即取消选中 Storyboard 中的复选框,设置automaticallyAdjustsScrollViewInsets
为NO
)。
我非常不满意的解决方法是:
- (void)viewDidAppear:(BOOL)animated {
self.tableView.contentOffset = CGPointMake(0.0, 0.0);
self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
}
相同的行viewWillAppear
或viewDidLoad
无效。
这对我有用:
- (void)loadView
{
[super loadView];
[self setAutomaticallyAdjustsScrollViewInsets:YES];
self.edgesForExtendedLayout = UIRectEdgeNone;
self.view.frame = CGRectZero;
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
如果在 UITableView 之前添加一个空的 UIView(或者任何可滚动的视图,例如 ScrollView 和 TextView),你可以有运气。
在 Xamarin iOS 中,在前台模式对话框被解除后,我在后台 UITableViewController 上出现了这个问题。在进入前台的过程中, UITableViewController 设置了插图(在 iOS 的某个地方):
这堂课解决了
public class UITableViewControllerWithBugFix : UITableViewController {
public UITableViewControllerWithBugFix(UITableViewStyle withStyle) : base(withStyle) {
}
public override void ViewWillLayoutSubviews() {
if (TableView.ContentInset.Top != 0.0f)
TableView.ContentInset = UIEdgeInsets.Zero;
if (TableView.ScrollIndicatorInsets.Top != 0.0f)
TableView.ScrollIndicatorInsets = UIEdgeInsets.Zero;
base.ViewWillLayoutSubviews();
}
}
我在容器视图中嵌入了一个 UITableViewController。为了摆脱不需要的 64 点垂直空间,我需要取消选中 Interface Builder 中的“调整滚动视图插图”,并在我的 UITableViewController 的 viewWillAppear 中设置 UITableView 的 contentInset,如下所示。
垂直空间的大小似乎与导航栏的框架高度和 y 偏移量相匹配。该问题仅发生在 iOS 7 上。
- (void)viewWillAppear:(BOOL)animated;
{
[super viewWillAppear:animated];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
const CGRect navBarFrame = self.navigationController.navigationBar.frame;
const CGFloat blankVerticalSpace = navBarFrame.origin.y + navBarFrame.size.height;
self.tableView.contentInset = UIEdgeInsetsMake(-blankVerticalSpace, 0, 0, 0);
}
}
我不时回到这种可怕的情况,我注意到它仍然是未知数。所以,为了以后的记忆...
最近,我正在修复这个解决方法。
不要问我为什么,我仍然认为这是 UIKit 中的一个 bug。
如果您转到故事板,您可以通过选择表格来更改偏移量,然后在属性检查器的表格视图部分下,您只需将左侧的分隔符插入更改为 0。
我认为真正的解决方案是在 tableview 上设置顶部和底部约束等于 topMargin 和 bottomMargin。不是顶部布局指南和底部布局指南。这使您可以将 automaticAdjustsScrollViewInsets 保持为 true。
我尝试了几个答案。更改情节提要中的设置会导致从左侧弹出的覆盖菜单出现涟漪问题。
我在情节提要中只有一个空白的 UIViewController,否则一切都是以编程方式生成的。
我对 UIViewController 内的 UIView 内的 UITableView 有同样的问题。也就是说,当 UIViewController 嵌入到导航控制器中时,节标题开始太低了。没有导航控制器,一切正常。
为了解决这个问题,我创建了一个 UILabel 并在约束条件下放置了 UILabel 底部约束 = UIView 的顶部约束(因此它不会显示在屏幕上。现在使用该附加控件(新标签),TableView 可以正常运行。
inputsContainerView.addSubview(titleLabel)
inputsContainerView.addSubview(tableView)
// inputsContainerView
///////////////////////////////////////
inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 0).isActive = true
inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true
inputsContainerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.7).isActive = true
// tableView
///////////////////////////////////////
tableView.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
tableView.topAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
tableView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
tableView.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor).isActive = true
// titleLabel - inserted to stop bad section header behavior
///////////////////////////////////////
titleLabel.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
titleLabel.bottomAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
titleLabel.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
titleLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true
我在 iOS 11 和 xib、UITableviewController 中遇到了同样的问题,我解决了它如下
[self.tableView setContentInset:UIEdgeInsetsMake(-44,0,0,0)];
如果您将 TableViewController 嵌入到 NavigationController 或 ContainerView 中,You have to constraint to margins instead of top Layout guide in Storyboard
. Check constraint to margins when you are doing the constraints
没有其他方法对我有用。我无法发表评论,所以我只是重申罗伯特陈的回答。
斯威夫特 3 解决方案:
class PaddingLessTableView : UITableView
{
override func headerView(forSection section: Int) -> UITableViewHeaderFooterView?
{
return nil
}
override func footerView(forSection section: Int) -> UITableViewHeaderFooterView?
{
return nil
}
}