自定义UITableViewCell中的水平UIScrollView – 使用IB Storyboard – 不滚动

主要目标是能够水平滚动每一行的内容。

我试图用X Code 5和使用StoryBoard来做到这一点。

这个问题似乎很简单,但经过几个小时的search,我除了一个有点类似的问题,没有得到任何东西,只是使用了编程方法。

在IB中,我的结构如下图所示。 查看结构

  • 设置为{5000,500}的滚动视图的内容大小均在IB和代码中设置
  • 滚动视图框架是{0,0} {320,44}
  • 标签框架设置为{20,0} {500,44}

我还提供了一个在github仓库中的示例项目 。 这个例子还包括在一个可用的viewcell之外工作的“普通”滚动视图。

请说我忽略了一些非常基本的东西。

Autolayout在你的故事板中被激活(这是一件好事)。 UIScrollView的可滚动大小是根据其子视图的约束来计算的。

所以你需要在UIScrollView的UIImageView上添加“顶部,底部,顶部,尾部空间到超级视图”。 他们可以全部设置为0。

现在,如果您不向UIImageView添加任何约束,那么将使用其intrinsicContentSize大小。

你的约束应该是这样的:

自动布局约束

请注意,您也遗失了您单元格的内容视图的限制。

当您完成约束时,从您的代码中删除所有setContentSize:调用。

另一种方法是在自定义的UITableViewCell中使用UICollectionView

我有同样的问题,并发现删除滚动视图的内容视图,并再次添加它的作品:

- (void)viewDidLoad { [super viewDidLoad]; [self.label removeFromSuperview]; [self.scrollView addSubview:self.label]; self.scrollView.contentSize = self.label.frame.size; } 

这不是最优雅的解决scheme,但它适用于我。

有了新的自动布局模式,iOS 7似乎已经打破了很多使用UIScrollView的iOS 6和更早版本的应用程序。 我最近发表了一个类似的问题(现在由版主暂时搁置,所以你可能无法看到)用户Lv.BeLeCk发现成功的地方:

 self.automaticallyAdjustsScrollViewInsets = NO; 

在视图控制器中保持滚动视图。 把它放在滚动视图的实例化之后。 看看这是否有效,如果是的话,请提高他的贡献。

我认为根本原因是在实例化UIScrollViews现在正在更新他们的大小基于他们当前的内容,而不是之前,他们只是离开他们地狱一个人。

为什么苹果想用这个我不知道的东西。 我还在等待多线标签的顶部和底部alignment!

确保在viewDidLayoutSubviewsscrollViewDidEndZooming:withView:atScale:调用setContentSize 。 在iOS6中,如果您没有这些方法中的代码,则默认行为可以正常工作,但在具有新布局系统的iOS7中,它们是必需的 。 它可能被调用不止一次的设置,只是不断调用setContentSize

我无法访问您的Storyboard ,与我的xCode 4。

首先,你应该连接你的ViewControllerUITableViewUITableViewCell在你的UITableView里面。 这就是为什么你应该尝试改变你的UITableView的设置。 连接之后,你应该尝试改变你的UITableViewcontentinset像这样:

 [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 2500, 2500)]; 

如果这不起作用,你也可以尝试改变你的TableView的内容大小。 也许你也必须改变你的UIView的大小,才能工作。

我通过IB来解决这个问题。

我必须在“身份值部分 – 用户定义的运行时属性”中使用与“大小检查器 – 查看值”相同的关键字“框架 – 矩形 – CGRectValue”具有相同的值。

我希望这可以帮助你。

我今天有同样的问题。 几个小时后继续查找,通过将单元格的select从“无”更改回“默认值”来解决。 希望这会帮助其他人。