我已经将一个简单的jane UITableView拖到了iOS 7中的UIViewController上。
现在在第一个单元格开始之前存在垂直空间偏移。我怎么摆脱它?我希望第一行更接近UITableView实际启动的顶部边缘。我没有要求大偏移吗?
有什么想法吗?
答案 0 :(得分:106)
UIViewController 的新 iOS 7 实现有一组新选项,允许开发人员选择系统是否会自动为 UIScrollView添加插件, UITableView 和派生。
要禁用此行为,请在 UIViewController 所选对象检查器上取消选中InterfaceBuilder中所有想要的UIViewControllers的这些框:
更多详情:
答案 1 :(得分:81)
默认情况下,表格视图控制器会将内容填充到导航栏下方,这样您就可以在其下方滚动内容,并在导航栏/工具栏下方以模糊状态查看内容。
看起来你将它定位在44(可能是64)px以将其从导航栏下移出来,但它已经补偿了这一点,因此你会有很大的差距。
转到IB中的storyboard / xib并取消导航栏内容下的节目内容。
答案 2 :(得分:68)
如果您不希望滚动视图的内容插入是自动的 调整后,自动设置调整ScrollViewInsets为NO。 (默认值 automaticAdjustsScrollViewInsets的值为YES。)
self.automaticallyAdjustsScrollViewInsets = NO;
答案 3 :(得分:34)
我遇到了类似的问题,在解除了一个viewController后,我的tableView中的contentOffset被改为(0,-64)。
我的解决方案有点奇怪,我尝试了所有其他答案但没有成功,解决我的问题的唯一办法就是在.xib的控件树中切换tableView位置
它是父视图中的第一个控件,如下所示:
我在ImageView之后移动了tableView,它运行起来了:
似乎将表格视图放在第一个位置会导致麻烦,并将表格视图移动到另一个位置可以解决问题。
Pd积。我没有使用autoLayout和故事板
希望这可以帮助别人!答案 4 :(得分:30)
它解决了我类似的问题:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}
答案 5 :(得分:13)
尝试使用此
tableView.separatorInset = UIEdgeInsetsZero;
显然,如果你支持的东西比iOS7少,你需要确保对象在调用之前响应这个选择器。
答案 6 :(得分:9)
说真的,改变contentOffset
不是解决方案。你只是修补一个问题,而不是修复原因。我一直面临同样的问题,结果是分组 tableViews在顶部有一个填充。在我的情况下,将类型设置为 plain 已经成功了。
希望能节省几分钟。 ž。
答案 7 :(得分:8)
对于iOS 9,此页面的其他答案都不适用于我(即取消选中故事板中的框,将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
或=Graph Shared With (3)=
{| class="wikitable"
|-
| '''ID'''
| '''Name'''
|-
|115 sirajTest ahmad sirajTestsirajTest ahmad sirajTest
|sirajTest ahmad sirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmad
|-
|15 sirajTest ahmad sirajTest
|Test Marquard sirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmad
|-
|92sirajTest ahmad sirajTestsirajTest ahmad sirajTestsirajTest ahmad sirajTest
|Ahtesham ul haqsirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmadsirajTest ahmad
|}
中的相同行无效。
答案 8 :(得分:5)
有时,当64
嵌入在导航控制器中时,我的表格视图顶部会出现UIViewController
高度差距。
在过去,我只会重新创建所有内容,希望在一个干净的平板之后,约束条件变得正确。
TIL:如果您不想对Top Layout Guide
建立垂直约束,则可以按住Option
键来访问Container Margin
。
然后确保Top Space to Superview
常量设置为0
。这至少对我有用。
答案 9 :(得分:4)
这对我有用:
- (void)loadView
{
[super loadView];
[self setAutomaticallyAdjustsScrollViewInsets:YES];
self.edgesForExtendedLayout = UIRectEdgeNone;
self.view.frame = CGRectZero;
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
答案 10 :(得分:2)
如果你在UITableView之前添加一个空的UIView(或任何视图是可滚动的,如ScrollView和TextView),你可以运气好。
答案 11 :(得分:1)
我在容器视图中嵌入了一个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);
}
}
答案 12 :(得分:1)
在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();
}
}
答案 13 :(得分:0)
如果您转到故事板,可以通过选择表来更改偏移量,然后在“属性”检查器的“表视图”部分下,将左侧的“分隔符插入”更改为0。
答案 14 :(得分:0)
我认为真正的解决方案是在tableview上设置你的顶部和底部约束等于topMargin和bottomMargin。不是顶部布局指南和底部布局指南。这允许您将automaticAdjustsScrollViewInsets保持为真。
答案 15 :(得分:0)
Swift 3解决方案:
class PaddingLessTableView : UITableView
{
override func headerView(forSection section: Int) -> UITableViewHeaderFooterView?
{
return nil
}
override func footerView(forSection section: Int) -> UITableViewHeaderFooterView?
{
return nil
}
}
答案 16 :(得分:0)
如果在TableController或ContainerView中嵌入了TableViewController,You have to constraint to margins instead of top Layout guide in Storyboard
。 Check constraint to margins when you are doing the constraints
没有其他方式可以帮助我。我无法评论,所以我只是重申Robert Chens的回答。
答案 17 :(得分:0)
我尝试了几个答案。更改故事板中的设置会导致从左侧弹出的叠加菜单出现涟漪问题。
我在故事板中只有一个空白的UIViewController,否则一切都是以编程方式生成的。
我在UIViewController里面的UIView里面有一个UITableView也有同样的问题。也就是说,当UIViewController嵌入在导航控制器中时,节标题开始得太远了。没有导航控制器一切正常。
为了解决这个问题,我创建了一个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
答案 18 :(得分:0)
我在iOS 11和xib,UITableviewController中遇到了同样的问题,我解决了它,如下所示
[self.tableView setContentInset:UIEdgeInsetsMake(-44,0,0,0)];