如何在滚动时将单元格的内容保留在屏幕上,直到单元格用完可用空间?

Posted

技术标签:

【中文标题】如何在滚动时将单元格的内容保留在屏幕上,直到单元格用完可用空间?【英文标题】:How to keep cell's content on screen while scrolling until the cell runs out of available space? 【发布时间】:2017-03-29 23:38:22 【问题描述】:

问题本身并没有说太多,但我想说的是:如何移动单元格的内容(比如说UILabel),以便在集合视图显示时可以在屏幕上看到标签滚动,直到 collectionView 的单元格用完可用空间。

但是,一张图胜过千言万语:

我有这样的东西,一个带有水平滚动的UICollectionViewCell

通常,当我滚动时会发生以下情况:

但是,我想要实现的是第一个单元格中的名称在单元格中有可用空间时向右滚动,不要忘记当没有更多可用空间时它会开始截断尾部,例如:Keaton Pickett -> Keaton Pick... -> Keaton... -> 等等,

我一直在考虑将单元格的内容嵌套在 UIScrollView 中,然后在 collectionView 滚动时通过代码滚动它。

我还考虑在视图滚动时更改单元格内容的CGRect 属性(在本例中为UILabel)(使用widthminX 属性。

但是,在这种情况下,检测UILabel 何时开始离开屏幕(如第二张图片的第一个单元格中的Kea)变得很困难。

在我的真实案例中,UICollectionView(水平滚动)嵌套在UITableView(垂直滚动)中。

我将感谢并感谢您在此困境中提供的帮助。 最好的问候!

【问题讨论】:

【参考方案1】:

我更喜欢你使用代码

目标 C

   - (void)checkVisibilityOfCell:(MyCustomUITableViewCell *)cell inScrollView:(UIScrollView *)aScrollView 
        CGRect cellRect = [aScrollView convertRect:cell.frame toView:aScrollView.superview];

        if (CGRectContainsRect(aScrollView.frame, cellRect))
            [cell notifyCompletelyVisible];
           [cells objectAtIndex:i].hidden= YES; // MAKE THE CELL VISIBLE 
        else
            [cell notifyNotCompletelyVisible];
           [cells objectAtIndex:i].hidden= NO;   // MAKE THE CELL UNVISIBLE 
    

    - (void)scrollViewDidScroll:(UIScrollView *)aScrollView  
        NSArray* cells = myTableView.visibleCells;

        NSUInteger cellCount = [cells count];
        if (cellCount == 0)
            return;

        // Loop through All  cells
        for (NSUInteger i = 1; i < cellCount - 1; i++)
            [[cells objectAtIndex:i] notifyCompletelyVisible];

    

【讨论】:

以上是关于如何在滚动时将单元格的内容保留在屏幕上,直到单元格用完可用空间?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 滚动到单元格顶部

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外

如何使 UITableView 内容围绕中心点滚动

表格内容在使用子视图的自定义单元格的 TableView 滚动上消失 - Swift

如何解决滚动具有自定义单元格的 UITableview 的崩溃?

表格视图显示在屏幕下方