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

Posted

技术标签:

【中文标题】UITableview ios中的水平和垂直滚动视图【英文标题】:Horizontal and vertical scrollview in a UITableview ios 【发布时间】:2016-11-22 06:49:21 【问题描述】:

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

像这样,

我尽力了,但我没有得到解决方案。谁能帮帮我。

感谢所有解决方案。

【问题讨论】:

我已经尽力了,但我没有得到解决方案。你能显示代码吗 我的代码完全错误,我删除了它。请问您有什么建议吗? tableViewCell 的第一行根据您的需要采用另一个集合视图或 TableView。具有垂直滚动的主 tableView 和您的内部集合/tableview 滚动水平.. 默认表格视图不支持水平滚动。您可以在 tableview 的一个单元格内使用滚动视图或集合视图来实现此目的。 有没有办法将 UIScrollview 创建为自定义单元格并将其添加到第一行?它会起作用吗? 【参考方案1】:

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

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

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

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

为了获得良好的实践,您应该为您的 TableViewCell 创建一个 CustomClass

【讨论】:

【参考方案2】:

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

您需要使用 UICollectionView 创建自定义单元格,并将 delegate, datasource 从您的控制器中放入。 然后在控制器中实现UICollectionViewDelegate、UICollectionViewDatasource方法。 要识别当前显示哪个单元格,请在单元格类中创建属性,例如您可以在 tableView willDisplay Cell 中设置的 tableViewIndexPath。 我认为它对你有帮助。

【讨论】:

【参考方案3】:

这将根据您的要求对我有用。请试试这个。

#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;


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

【讨论】:

【参考方案4】:

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

horizontally table scrolling

vertically table scrolling

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

【讨论】:

【参考方案5】:

您需要通过子类化来创建自定义滚动视图,然后将下面的代码放入其中。在 Storyboard 或其他内容中,使用此自定义 scrollView 类。然后 TableView 和 Scroll View 将同时滚动。您需要这样做,因为无法从您的 ViewController 访问 ScrollView 的 gestureRecognizer 委托,它必须通过子类化从 ScrollView 类本身获取。

- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer

    return YES;

【讨论】:

以上是关于UITableview ios中的水平和垂直滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使 UITableView 水平和垂直滚动

Xamarin iOS Autolayout:自动调整各种设备的宽度和垂直滚动,同时保持水平滚动禁用演示链接

UITableView 的水平移动?

垂直轨道中的 UIScrollView 水平滚动拇指

UITableView contentInset 使表格视图除了垂直滚动外还水平滚动

iOS7 中 UIScrollView 中的 UITableView