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

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

像这样,

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

感谢所有解决方案。

【问题讨论】:

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

标签: ios objective-c uitableview 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;
          }
          

          【讨论】:

            猜你喜欢
            • 2013-11-30
            • 1970-01-01
            • 2015-08-04
            • 2015-12-21
            • 1970-01-01
            • 2011-01-03
            • 2017-02-03
            相关资源
            最近更新 更多