如何以编程方式增加具有约束的 UIScrollView 的高度?
Posted
技术标签:
【中文标题】如何以编程方式增加具有约束的 UIScrollView 的高度?【英文标题】:How to increase the height, programmatically, of a UIScrollView that has constrains? 【发布时间】:2017-02-02 02:05:04 【问题描述】:我是这个 ios 应用程序世界的新手,我正在开发一个需要显示项目详细信息的应用程序。这个细节可以接收来自用户的 cmets,我需要的是每次细节得到一个新的评论时我的屏幕高度就会增加,这就是我所做的,这就是屏幕:
Scroll 的约束是:Trailing、Leading、top 和 bottom 到其父视图。 对于视图内容:与其父视图的尾随、前导、顶部和底部,在 x 和 y 中对齐中心,并等于父视图的高度和宽度。
所有的cmets都来自一个服务,我想要增加内容。我展示了所有的 cmets,但 UIScrollView 不起作用。我认为是因为限制
这是我如何加载和打印 cmets 并更改我的滚动视图的内容:
int y = bottomLine.frame.origin.y + 8;
int numComments = [[content objectForKey:@"comments"] intValue];
if (numComments > 0)
for (int j=0; j < [comments count]; j++)
commentData = [comments objectAtIndex:j];
//Create all the elements
viewComments = [[UIView alloc] initWithFrame:CGRectMake(8, y, self.view.bounds.size.width - 16, 109)];
viewComments.backgroundColor = [UIColor grayColor];
UIImageView *viewImgComment = [[UIImageView alloc] initWithFrame:CGRectMake(8, 8, 50, 50)];
NSURL *linckImage = [NSURL URLWithString:[commentData objectForKey:@"image"]];
[viewImgComment sd_setImageWithURL:linckImage placeholderImage:[UIImage imageNamed:@"place_holder_user"]];
viewImgComment.layer.cornerRadius = 25;
viewImgComment.clipsToBounds = YES;
UILabel *lblTituloComment = [[UILabel alloc] initWithFrame:CGRectMake(50 + 16, 8, (viewComments.bounds.size.width - 74) , 17)];
[lblTituloComment setText:[commentData objectForKey:@"name"]];
[lblTituloComment setFont:[UIFont systemFontOfSize:14.0f]];
UIView *viewRating = [[UIView alloc] initWithFrame:CGRectMake(50 + 16, 17 + 16, 121, 23)];
viewRating.backgroundColor =[UIColor blackColor];
viewRating.layer.cornerRadius = 11;
UILabel *lblDescripcionComment = [[UILabel alloc] initWithFrame:CGRectMake(8, 50 + 8, (viewComments.bounds.size.width - 16), 43)];
[lblDescripcionComment setText:[commentData objectForKey:@"comment"]];
[lblDescripcionComment setFont:[UIFont systemFontOfSize:14.0f]];
[lblDescripcionComment setNumberOfLines:0];
y = y + 117;
[viewComments addSubview:viewImgComment];
[viewComments addSubview:lblTituloComment];
[viewComments addSubview:viewRating];
[viewComments addSubview:lblDescripcionComment];
[masterScroll addSubview:viewComments];
//Increase the content size
masterScroll.contentSize = CGSizeMake(self.view.bounds.size.width, y);
我希望有人能帮助我,我已经尝试了 3 天,研究和询问。有任何问题或对某事的任何解释,请告诉我。
【问题讨论】:
您能告诉我,对于 cmets,您使用的是 table view 还是 uiview?如果表视图没有问题。如果您使用的是 uiview,那么您需要进行一些更改。不是什么大问题。告诉我吧。 当然,我正在使用 uiview。 1.在添加评论之前记录当前高度。添加评论后,计算该视图的高度。查找先前高度和当前高度之间的差异。 2.转到故事板->选择滚动视图的高度约束->为该约束创建一个出口。 -> 现在去代码 -> heghtConstraint.constant = differenceHeight+currentHeightOfScrollView. 【参考方案1】:首先你必须得到你的标签高度(带有标签的内容文本)。
- (CGFloat)getLabelHeight:(UILabel*)label
//Here label is your Comment label.
CGSize constraint = CGSizeMake(label.frame.size.width, CGFLOAT_MAX);
CGSize size;
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGSize boundingBox = [label.text boundingRectWithSize:constraint
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@NSFontAttributeName:label.font
context:context].size;
size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));
return size.height;
获取您的评论标签高度并设置滚动视图内容大小:
CGSize *size;
CGFloat height = [self getLabelHeight:lblDescripcionComment];
NSLog(@"totalHeight :%f",[self getLabelHeight:lblDescripcionComment]);
lblDescripcionComment.frame = CGRectMake(18, 260, 220, height);
#Here h is your scrollview height without comment label.
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,h+height)];
【讨论】:
以上是关于如何以编程方式增加具有约束的 UIScrollView 的高度?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将纵横比约束应用于自定义 UICollectionViewCell?