计算 iOS 中水平 UICollectionView 的动态单元格高度

     2023-03-10     211

关键词:

【中文标题】计算 iOS 中水平 UICollectionView 的动态单元格高度【英文标题】:Calculate dynamic cell height for a horizontal UICollectionView in iOS 【发布时间】:2017-09-07 06:06:54 【问题描述】:

我正在创建一个基于水平滚动卡片的 UI。全部设置,但是,现在有些卡比其他卡更大(更多内容)。在这种情况下,我想我的解决方案不会起作用,因为我这样计算流布局大小:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    return CGSizeMake((collectionView.frame.size.width-30)/2,(collectionView.frame.size.height);
 

这限制了单元格的高度。甚至可以为水平布局设置 UICollectionViewCells 的动态高度吗?网上没有找到任何线索。请帮忙!!

【问题讨论】:

【参考方案1】:
 - (CGSize)calculateSizeForSizingCell:(UICollectionViewCell *)sizingCell width:(CGFloat)width 
CGRect frame = sizingCell.frame;
frame.size.width = width;
sizingCell.frame = frame;
[sizingCell setNeedsLayout];
[sizingCell layoutIfNeeded];

CGSize size = [sizingCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
                    withHorizontalFittingPriority:UILayoutPriorityRequired
                          verticalFittingPriority:UILayoutPriorityFittingSizeLevel];
return size;
 

【讨论】:

【参考方案2】:

您必须动态计算集合视图单元格内每个文本的高度。

查看以下代码并根据您的要求进行更新。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 

    NSMutableDictionary *currentObject = [yourMutableArray objectAtIndex:indexPath.row];
    CGFloat cvWidth = (collectionView.frame.size.width-30)/2;
    CGSize rect;

    CGFloat heightOfText = [self getTextHeightFromString:[currentObject valueForKey:@"yourKeyName"] ViewWidth:cvWidth WithPading:10];

    CGFloat heightOfSecondText = [self getTextHeightFromString:[currentObject valueForKey:@"yourSecondKeyName"] ViewWidth:cvWidth WithPading:10];

    //get height of each and every text and calculate total height

    rect.width = cvWidth;
    rect.height = heightOfText + heightOfSecondText;

    return rect;



- (CGFloat)getTextHeightFromString:(NSString *)text ViewWidth:(CGFloat)width WithPading:(CGFloat)padding

    CGRect rect = [text boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:@NSFontAttributeName: [UIFont fontWithName:@"yourFontName" size:16] // change font size accordingly
                                     context:nil];

    return rect.size.height + padding;

【讨论】:

IOS中水平滚动视图问题内的滑块

】IOS中水平滚动视图问题内的滑块【英文标题】:SliderinsideHorizontalscrollviewissueinIOS【发布时间】:2016-10-2115:50:52【问题描述】:我的布局在一个水平滚动的scrollview中有几个sliders。问题是当我尝试拖动滑块时它不会移动,而是滚... 查看详情

在 postgresql 中水平分片的好方法是啥

】在postgresql中水平分片的好方法是啥【英文标题】:whatisagoodwaytohorizontalshardinpostgresql在postgresql中水平分片的好方法是什么【发布时间】:2010-11-0222:51:46【问题描述】:什么是postgresql中水平分片的好方法1.pgpool22.gridsql这是使用... 查看详情

java示例代码_在javafx中水平增长进度条

java示例代码_在javafx中水平增长进度条 查看详情

UICollectionView 中水平滚动的单元格消失

】UICollectionView中水平滚动的单元格消失【英文标题】:CellsdisappearingwithhorizontalscrollinginUICollectionView【发布时间】:2017-05-1922:29:52【问题描述】:我被这个奇怪的问题困扰了一段时间,似乎无法弄清楚。设置A是UICollectionViewB是A的... 查看详情

如何在 UINavigationBar 中水平定位 backIndicatorImage

】如何在UINavigationBar中水平定位backIndicatorImage【英文标题】:HowtohorizontallypositionthebackIndicatorImageinUINavigationBar【发布时间】:2016-01-0416:26:44【问题描述】:我使用此代码将插图添加到导航栏的backIndicator图像。但是,这仅适用于... 查看详情

在 SQL Server 中水平连接两个以上的表

】在SQLServer中水平连接两个以上的表【英文标题】:ConcatenatemorethantwotableshorizontallyinSQLServer【发布时间】:2015-02-2408:03:47【问题描述】:以下是架构+---------+---------+|EmployeeTable|+---------+---------+|EmpId|Name|+---------+---------+|1|John||2|Li 查看详情

如何在 Android 中水平滚动 ImageView?

】如何在Android中水平滚动ImageView?【英文标题】:HowtoscrollImageViewhorizontalinAndroid?【发布时间】:2019-01-2503:59:42【问题描述】:在我的应用程序中,我想将图像从服务器显示到ImageView。我的imageView填满整个屏幕,为此我使用android... 查看详情

在 matplotlib 中水平显示单选按钮

】在matplotlib中水平显示单选按钮【英文标题】:DisplayingRadiobuttonshorizontallyinmatplotlib【发布时间】:2019-08-0108:51:14【问题描述】:我正在使用matplotlib.widgets在我的小部件中创建单选按钮,即将出现的按钮垂直堆叠,我希望它们水... 查看详情

如何在 JavaScript 中水平翻转图像

】如何在JavaScript中水平翻转图像【英文标题】:HowtohorizontiallyflipaimageinJavaScript【发布时间】:2022-01-2211:30:48【问题描述】:我正在尝试翻转从网络摄像头流中捕获的图像。CSS中的网络摄像头view被翻转,但是当我拍摄快照时,它... 查看详情

在材料设计中水平对齐元素

】在材料设计中水平对齐元素【英文标题】:horizontallyalignelementsinmaterialdesign【发布时间】:2016-03-0106:48:26【问题描述】:我有一个包含两个组件的简单工具栏:一个h1和一个菜单按钮。我希望h1居中在工具栏和左侧的菜单按钮。... 查看详情

如果文本溢出,则在 UITableViewCell 中水平滚动 UITextField

】如果文本溢出,则在UITableViewCell中水平滚动UITextField【英文标题】:HorizontallyscrollUITextFieldinaUITableViewCelliftextoverflows【发布时间】:2015-08-1614:57:12【问题描述】:如果文本溢出,我如何能够水平滚动UITableViewCell中的UITextField?我... 查看详情

停止视图在相对布局中水平重叠

】停止视图在相对布局中水平重叠【英文标题】:Stopviewsoverlappinghorizontallyinarelativelayout【发布时间】:2016-04-2815:57:40【问题描述】:作为日历的一部分,我有两个视图,一个日视图和一个事件视图。我希望我的事件以宽度填充... 查看详情

使用jQuery在区域中水平滚动[重复]

】使用jQuery在区域中水平滚动[重复]【英文标题】:ScrollhorizontallyinareawithjQuery[duplicate]【发布时间】:2017-02-1506:01:21【问题描述】:我目前正在做一个项目,我已经介入了一大堆....一些不开心的事情。这个想法很简单我有具有200... 查看详情

在 SwiftUi 中水平组合和打破垂直滚动视图?

】在SwiftUi中水平组合和打破垂直滚动视图?【英文标题】:CombiningandBreakingaVerticalscrollViewHorizontallyinSwiftUi?【发布时间】:2020-10-3010:50:21【问题描述】:有谁知道如何使用SwiftUi将VerticalScrollView分解为小的水平ScrollView:我有下面... 查看详情

使用jQuery在区域中水平滚动[重复]

】使用jQuery在区域中水平滚动[重复]【英文标题】:ScrollhorizontallyinareawithjQuery[duplicate]【发布时间】:2017-02-1506:01:21【问题描述】:我目前正在做一个项目,我已经介入了一大堆....一些不开心的事情。这个想法很简单我有具有200... 查看详情

如何在jquery中水平滚动textarea?

】如何在jquery中水平滚动textarea?【英文标题】:howtoscrolltextareahorizontallyinjquery?【发布时间】:2013-10-2122:00:50【问题描述】:我想滚动输入字段。所以我用谷歌搜索我发现我们不能滚动输入字段,但是我们可以水平滚动文本区域... 查看详情

matplotlib中水平条形图的注释[重复]

】matplotlib中水平条形图的注释[重复]【英文标题】:Annotationofhorizontalbargraphsinmatplotlib[duplicate]【发布时间】:2016-10-1320:55:18【问题描述】:我需要注释水平条形图。我可以使用matplotlib网站中显示的示例来注释垂直条形图,但类... 查看详情

xml在gridview中水平(可能垂直)居中项目(代码片段)

查看详情