2016-11-22 178 views
0

我想在單個UITableview中添加水平滾動和垂直滾動。UITableview中的水平和垂直scrollview ios

這樣, enter image description here

我想我的水平最好的,但我沒有得到解決。任何人都可以請幫我在這裏。

所有的解決方案,讚賞。

+0

我盡我最好的水平,但我沒有得到解決方案。你可以顯示代碼 –

+0

我的代碼是完全錯誤的,我刪除它。你有什麼建議嗎? –

+0

tableViewCell的第1行根據您的需要採取另一個集合視圖或TableView。主tableView有垂直滾動和你的收藏/ tableview滾動水平.. –

回答

1

是您可以做到這一點.. 爲此,您需要在每個單元格內添加scrollView並調整其內容大小,以便它可以水平滾動。 讓我給大家簡單介紹你怎麼能如果您正在使用自動版式的使用,你應該插入TableView中的內容查看的細胞一個UIScrollView,並給他們約束(.Top .Trailing .Bottom .Leading),所有的這些限制有constant = 0做..

然後在此視圖中添加其他UIView並設置您爲scrollView設置的相同約束。這會告訴你紅色的約束,表明這些約束是模棱兩可的,但不用擔心,只需控制從這個視圖畫出你的光標到滾動視圖的父視圖,並設置相等的寬度和相等的高度。當你完成這個請更改priority of equal width constraint from 1000 to 720。 現在最後在上面的UIView中添加實際內容視圖,並在此視圖中插入想要插入的任何內容,它可能會超出其父視圖的邊界。當完成添加對象時,只需像上面提到的(.Top .Trailing .Bottom .Leading)那樣使用相同的常量,但是這次也應該提供寬度約束。

此寬度約束將實際上充當約束高度。您可以稍後更改大小,將此寬度約束設置爲IBOutLet,然後以編程方式調整scrollContent寬度。

良好做法,你應該爲你的TableViewCell

1

在每個單元是可以添加滾動一個CustomClass

您需要創建自定義單元格與UICollectionView裏面放委託,數據源從您的控制器。
然後在控制器中執行UICollectionViewDelegate,UICollectionViewDatasource方法。 要識別當前顯示的單元類中的哪個單元格正在創建屬性,例如tableViewIndexPath您可以在中設置tableView willDisplay單元格。 我覺得它對你有所幫助。

1

這將作爲您的requirements.Please試試這個。

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

} 

您根據需要更改標籤的高度,寬度。

+0

它是否適合你? – Sanjukta

0

您需要通過創建一個自定義的scrollView並將其放在下面的代碼中。在Storyboard或其他方面,使用這個自定義的scrollView類。然後TableView和Scroll View將同時滾動。您需要這樣做,因爲ScrollView的gestureRecognizer委託不能從您的ViewController訪問,它必須從ScrollView類本身通過繼承它的子類獲得。

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