UITableview ios中的水平和垂直滚动视图

时间:2016-11-22 06:49:21

标签: ios objective-c uitableview uiscrollview

我想在单个UITableview中添加水平滚动和垂直滚动。

像这样, enter image description here

我尝试了最好的水平,但我没有得到解决方案。任何人都可以帮助我。

所有解决方案都表示赞赏。

5 个答案:

答案 0 :(得分:1)

是的你可以这样做.. 为此,您需要在每个单元格中添加scrollView并调整其内容大小,以便它可以水平滚动。 让我简要地告诉你,你怎么能这样做..

如果您使用的是AutoLayouts,则应在TableView Cell的ContentView中插入UIScrollView并为其提供约束(.Top .Trailing .Bottom .Leading),所有这些约束都为constant = 0

然后在此视图中添加其他UIView,并设置您为scrollView设置的相同约束。这将显示红色约束,表明这些约束是不明确的,但dnt担心只是控制将光标从此视图绘制到Scroll View的parentView并设置相等的宽度和相等的高度。完成后请更改priority of equal width constraint from 1000 to 720。 现在最后在上面的UIView中添加实际的内容视图,并在此视图中插入您想要插入的内容,它可能会超出其父视图的边界。完成添加对象后,只需将上述(.Top .Trailing .Bottom .Leading)之类的约束与相同的常量放在一起,但这次你也应该提供宽度约束。

此宽度约束实际上将充当约束高度。您可以稍后通过将此宽度约束设置为IBOutLet来更改大小,然后以编程方式调整scrollContent宽度。

为了良好的做法,您应为CustomClass

创建TableViewCell

答案 1 :(得分:1)

是的,您可以在每个单元格中添加滚动条。

您需要在控制器中输入委托,数据源,并使用 UICollectionView 创建自定义单元格。
然后在控制器中实现 UICollectionViewDelegate,UICollectionViewDatasource 方法。 要识别当前在单元格类中显示创建属性的单元格,例如 tableViewIndexPath ,您可以在 tableView中设置显示单元格。 我认为它会帮助你。

答案 2 :(得分:1)

这对我来说是您的要求。请试试这个。

#pragma mark -- Table view delegate and datasource --
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

        return 10;

}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *cellid = @"cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellid];
        if (cell == nil) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellid];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
        self.tblHistory.showsHorizontalScrollIndicator = NO;
        self.tblHistory.showsVerticalScrollIndicator = NO;

    if (indexPath.row == 0) {
        UIScrollView *scrollViewFood = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 44)];

        scrollViewFood.pagingEnabled = YES;
        UILabel *lblFood;
        NSInteger numberOfFoods = arrFoods.count;
        CGFloat xOrigin = 0;
        for (int i = 0; i < numberOfFoods; i++) {
            NSString *strNames = [arrFoods objectAtIndex:i];
            CGSize textSize=[strNames sizeWithAttributes:
                             @{NSFontAttributeName: [UIFont boldSystemFontOfSize:14.0]}];
            xOrigin = CGRectGetMaxX(lblFood.frame);
            lblFood = [[UILabel alloc] initWithFrame:CGRectMake(xOrigin, 0, textSize.width + 10, 44)];
            lblFood.text = strNames;
            lblFood.font = [UIFont boldSystemFontOfSize:14.0];
            lblFood.textAlignment = NSTextAlignmentCenter;
            lblFood.backgroundColor = [UIColor clearColor];
            [scrollViewFood addSubview:lblFood];
        }

        scrollViewFood.contentSize = CGSizeMake(lblFood.frame.size.width + xOrigin + 10,44);
        scrollViewFood.showsHorizontalScrollIndicator = NO;
        scrollViewFood.showsVerticalScrollIndicator = NO;
        scrollViewFood.delegate=self ;
        [cell.contentView addSubview:scrollViewFood];

    }else if (indexPath.row == 2){
        UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 44)];
         scrollView.pagingEnabled = YES;
        scrollView.contentSize = CGSizeMake(cell.frame.size.width , 100);
        [cell.contentView addSubview:scrollView];

    }

    return cell;

}

您可以根据需要更改标签的高度和宽度。

答案 3 :(得分:0)

为了更好地理解UITableView滚动,您可以关注这两个链接

horizontally table scrolling

vertically table scrolling

我希望它可以帮助您更好地理解并熟悉UITableViewDelegate。

答案 4 :(得分:0)

您需要通过子类化创建自定义scrollView,并将代码放在其中。在Storyboard或其他任何内容中,使用此自定义scrollView类。然后TableView和Scroll View将同时滚动。你需要这样做是因为ScrollView的gestureRecognizer委托不能从你的ViewController访问,它必须通过子类化从ScrollView类本身获得。

- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
相关问题