UITableView以iOS 7中的偏移量开始

UITableView以iOS 7中的偏移量开始,uitableview,ios7,Uitableview,Ios7,我已经在iOS 7中将一个普通的jane UITableView拖到UIViewController上 现在,在第一个单元格开始之前,存在空间的垂直偏移。我怎样才能摆脱它?我希望第一行更靠近UITableView实际开始位置的上边缘。我没有要求大的补偿,是吗 有什么想法吗?默认情况下,表视图控制器将在导航栏下填充内容,以便您可以滚动导航栏下的内容,并在模糊状态下在导航栏/工具栏下查看内容 看起来你把它定位在44像素(也许64像素)的位置,把它从导航条下面移出来,但是它已经补偿了这个,所以你得到

我已经在iOS 7中将一个普通的jane UITableView拖到UIViewController上

现在,在第一个单元格开始之前,存在空间的垂直偏移。我怎样才能摆脱它?我希望第一行更靠近UITableView实际开始位置的上边缘。我没有要求大的补偿,是吗


有什么想法吗?

默认情况下,表视图控制器将在导航栏下填充内容,以便您可以滚动导航栏下的内容,并在模糊状态下在导航栏/工具栏下查看内容

看起来你把它定位在44像素(也许64像素)的位置,把它从导航条下面移出来,但是它已经补偿了这个,所以你得到了一个很大的间隙


转到IB中的故事板/xib并取消选中导航栏内容下的显示内容。

新的iOS 7实现的UIViewController有一组新选项,允许开发人员选择系统是否会自动为UIScrollView添加插图,UITableView和派生

要禁用此行为,请取消选中InterfaceBuilder中所有想要的UIViewController的复选框,在UIViewController选定对象检查器上:

有关详细信息:


  • 它解决了我类似的问题:

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
    tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
    }
    
    试试这个

    tableView.separatorInset=UIEdgeInsetsZero

    显然,如果您支持的是iOS7以外的任何东西,则需要确保对象在调用它之前响应此选择器。

    如果您不希望滚动视图的内容插入自动 调整后,将automaticallyAdjustsScrollViewInsets设置为NO.(默认值 automaticallyAdjustsScrollViewInsets的值为“是”。)


    如果转到情节提要,可以通过选择表格来更改偏移量,在“属性检查器”的“表格视图”部分下,只需将左侧的分隔符插图更改为0即可。

    这对我很有用:

    - (void)loadView
    {
        [super loadView];
    
        [self setAutomaticallyAdjustsScrollViewInsets:YES];
    
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.view.frame = CGRectZero;
        self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    }
    

    我有一个类似的问题,在解除viewController之后,我的tableView的contentOffset被更改为(0,-64)

    我的解决方案有点奇怪,我尝试了所有其他答案,但没有成功,唯一解决问题的方法是在.xib的控件树中切换tableView的位置

    它是父视图中的第一个控件,如下所示:

    我在ImageView之后移动了tableView,它工作了:

    似乎是将表视图放在第一个位置导致了问题,而将表视图移动到另一个位置修复了问题

    p.D.我没有使用自动布局,也没有使用故事板


    希望这能帮助别人

    我在容器视图中嵌入了一个UITableViewController。为了消除不需要的64点垂直空间,我需要取消选中Interface Builder中的“调整滚动视图插入”,并在我的UITableViewController的视图中设置UITableView的内容插入,如下所示

    垂直空间的大小似乎与导航栏的框架高度和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);
        }
    }
    

    说真的,更改
    contentOffset
    不是解决办法。你只是在修补问题,而不是解决问题的原因。我一直面临着同样的问题,结果是分组表视图的顶部有一个填充。在我的例子中,将type设置为plain就完成了这个任务

    希望它能节省一些时间。
    Z.

    在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();
        }
    }
    

    我时不时地回到这种糟糕的情况,我注意到它仍然是未知的。所以,为了将来的记忆

    最近,我正在解决这个问题

  • 在UITableView顶部添加一个子视图,其像素高度为零。使用自动布局或不使用自动布局
  • 如果我有信心:-)我删除这个假视图,修复顶部的约束,然后神奇地工作

  • 不要问我为什么,我仍然认为这是UIKit中的一个缺陷。

    如果在UITableView之前添加一个空的UIView(或者任何可以滚动的视图,如ScrollView和TextView),你会有好运。

    有时,当
    UIViewController
    嵌入导航控制器时,我的表视图顶部会出现一个
    64
    高度间隙

    在过去,我只会重新创建所有内容,希望这些约束在一清二楚后会变得正确

    TIL:如果不想对
    顶部布局指南
    进行垂直约束,可以按住
    选项
    键访问
    容器边距

    然后确保Superview的
    顶部空间
    常量设置为
    0
    。这至少对我有用


    在iOS 9中,此页面的其他答案对我来说都不起作用(即,取消勾选故事板中的框,将
    自动调整滚动视图插图设置为

    我真正不满意的解决方法是:

    - (void)viewDidAppear:(BOOL)animated {
        self.tableView.contentOffset = CGPointMake(0.0, 0.0);
        self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
    }
    

    视图中的相同行将出现
    视图加载
    无效。

    我认为真正的解决方案是在tableview上设置顶部和底部约束,使其等于topMargin和bottomMargin。不是顶部布局指南和底部布局指南。这允许您保持自动调整滚动视图插图为真。

    Swift 3解决方案:

    class PaddingleStableView:UITableView
    {
    覆盖func headerView(对于节:Int)->UITableViewHeaderFooterView?
    {
    归零
    }
    覆盖func footerView(对于节:Int)->UITableViewHeaderFooterView?
    {
    归零
    }
    }
    
    如果嵌入y
    - (void)viewDidAppear:(BOOL)animated {
        self.tableView.contentOffset = CGPointMake(0.0, 0.0);
        self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
    }
    
        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
    
    [self.tableView setContentInset:UIEdgeInsetsMake(-44,0,0,0)];