我已将普通的简陋UITableView拖到iOS 7中的UIViewController上。
现在,第一个单元格开始之前存在一个垂直的空间偏移。我该如何摆脱呢?我希望第一行更接近UITableView实际开始的位置的顶部边缘。我没有要求大额补偿吗?
有任何想法吗?
我已将普通的简陋UITableView拖到iOS 7中的UIViewController上。
现在,第一个单元格开始之前存在一个垂直的空间偏移。我该如何摆脱呢?我希望第一行更接近UITableView实际开始的位置的顶部边缘。我没有要求大额补偿吗?
有任何想法吗?
Answers:
默认情况下,表格视图控制器会将内容向下填充到导航栏下方,以便您滚动其下方的内容,并在导航栏/工具栏下方以模糊状态查看内容。
看起来您将其定位在44(也许是64)像素处以将其从导航栏下方移出,但它已经对此进行了补偿,因此您会得到很大的差距。
转到IB中的情节提要/ xib,然后取消导航栏下的显示内容。
Adjust Scroll View insets
,取消选中标记。
新的iOS 7 UIViewController实现具有一组新选项,允许开发人员选择系统是否将自动为UIScrollView,UITableView添加插图和派生。
要禁用此行为,请在UIViewController选定的对象检查器上取消选中InterfaceBuilder中所有所需的UIViewController的以下框:
更多细节:
如果您不希望自动调整滚动视图的内容插图,请将autoAdjustsScrollViewInsets设置为NO。(automaticAdjustsScrollViewInsets的默认值为YES。)
self.automaticallyAdjustsScrollViewInsets = NO;
Adjust Scroll View Insets
视图控制器布局的复选框。
automaticallyAdjustsScrollViewInsets = NO
在视图控制器中设置。
我有一个类似的问题,解雇了一个viewController之后,我的tableView的contentOffset更改为(0,-64)。
我的解决方案有点怪异,我尝试了所有其他答案,但没有成功,唯一解决我问题的方法是切换.xib控件树中的tableView位置
它是父视图中的第一个控件,如下所示:
我将tableView移到ImageView之后,它可以正常工作:
似乎将表格视图放在第一个位置会引起问题,而将表格视图移到另一个位置可以解决此问题。
PD我既没有使用autoLayout也没有使用故事板
希望这可以帮助某人!
它解决了我类似的问题:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
试试这个
tableView.separatorInset = UIEdgeInsetsZero;
显然,如果您支持的不是iOS7,则需要确保对象在调用此选择器之前对其做出响应。
在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
无效。
Adjust Scroll View insets
复选框适用
我在容器视图中嵌入了UITableViewController。为了摆脱不必要的垂直空间的64个点,我需要在Interface Builder中取消选中“ Adjust Scroll View Insets”,并在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);
}
}
在Xamarin iOS中,前台模式对话框关闭后,我在后台UITableViewController上发生了此问题。在移到前台的过程中,UITableViewController设置了inset(在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();
}
}
我尝试了几个答案。更改情节提要中的设置会导致从左侧弹出的覆盖菜单产生波纹问题。
我在情节提要中只有一个空白的UIViewController,否则所有内容都是以编程方式生成的。
我在UIViewController内的UIView内的UITableView遇到相同的问题。即,当将UIViewController嵌入到Navigation Controller中时,节标题开始太低。没有导航控制器,一切正常。
为了解决该问题,我创建了一个UILabel,并在其中放置了UILabel底部约束= UIView的顶部约束(因此它不会显示在屏幕上。现在有了该附加控件(新Label),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