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