自定义UITableViewCell内部的水平UIScrollView - 使用IB Storyboard - 不滚动

时间:2013-10-04 15:46:29

标签: ios objective-c uitableview uiscrollview

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

我正在尝试使用X Code 5并使用StoryBoard。

这个问题似乎很简单,但经过几个小时的搜索后,除了一个有点类似但只使用程序化方法see here的问题外,我什么都没有。

在IB中,我的结构如下面的设计所示。 View structure

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

我还提供了example project in a github repository。该示例还包括在uitableviewcell外部工作的“普通”滚动视图。

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

8 个答案:

答案 0 :(得分:8)

另一种替代方法是在自定义UITableViewCell

中使用UICollectionView

答案 1 :(得分:6)

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

因此,您需要在UIScrollView内的UIImageView上添加“topview,bottom,leading,trailing space to superview”。它们都可以设置为0。

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

您的约束应如下所示:

autolayout constraints

请注意,您还缺少对单元格内容视图的约束。

完成约束后,从代码中删除所有setContentSize:调用。

答案 2 :(得分:2)

我遇到了同样的问题,发现删除scrollview的内容视图并再次添加它会起作用:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.label removeFromSuperview];
    [self.scrollView addSubview:self.label];
    self.scrollView.contentSize = self.label.frame.size;
}

这不是最优雅的解决方案,但它对我有用。

答案 3 :(得分:1)

凭借其新的自动布局模式,iOS 7似乎打破了许多使用UIScrollView的iOS 6及更早版本的应用程序。我最近发布了一个类似的问题 [现在被版主暂停 - 所以你可能无法看到它] 用户Lv.BeLeCk在哪里找到了成功:

self.automaticallyAdjustsScrollViewInsets = NO;

在持有scrollview的视图控制器中。只需将它放在滚动视图的实例化之后。看看是否有效,如果确实如此,请赞成他的贡献。

我认为根本原因是在实例化时,UIScrollViews现在根据它们当前的内容更新它们的大小,而不是之前它们只是将它们留给了地狱。

为什么Apple想用我不知道的东西捣乱。我还在等待多行标签的顶部和底部对齐!

答案 4 :(得分:1)

确保在setContentSizeviewDidLayoutSubviews中调用scrollViewDidEndZooming:withView:atScale:。在iOS6中,如果您没有这些方法中的代码,默认行为可以正常工作,在具有新布局系统的iOS7中,它们是必需。对于设置,可能会多次调用它,只需继续调用setContentSize

答案 5 :(得分:0)

我无法使用我的xCode 4访问您的Storyboard

首先,您应该将UITableViewViewController相关联。 UITableViewCell位于UITableView内。这就是为什么你应该尝试更改UITableView的设置。连接后,您应该尝试更改contentinset的{​​{1}},如下所示:

UITableView

如果这不起作用,您还可以尝试更改TableView的内容大小。也许您还必须在[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 2500, 2500)]; 工作之前更改其大小。

答案 6 :(得分:0)

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

我必须在“身份值部分 - 用户定义的运行时属性”中使用相同的值,其中“frame - Rect - CGRectValue”等于“Size inspector - View values”。

我希望这对你有所帮助。

答案 7 :(得分:0)

我今天遇到同样的问题。 几个小时后继续查找,通过将单元格的选择更改回默认值来解决。 希望它能帮助其他人。