缩放UIScrollview可缩放后如何调整UILabel文本的大小
Posted
技术标签:
【中文标题】缩放UIScrollview可缩放后如何调整UILabel文本的大小【英文标题】:How to resize UILabel text after zooming UIScrollview zoomable 【发布时间】:2012-11-23 13:48:09 【问题描述】:我有一个可缩放的 UIScrollview,子视图是一个 UIView (viewTexto),其中包含一个 UILabel (messageLabel)。
这是代码
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollViewtmp
return viewTexto;
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollViewtmp withView:(UIView *)view atScale:(float)scale
messageLabel.contentScaleFactor=scale;
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, messageLabel.frame.origin.y + messageLabel.frame.size.heightt)];
用这段代码我可以缩放,而且文字不模糊,没有水平滚动但是UILabel的尺寸仍然太大,所以它被剪切了。我需要 UILabel 的宽度再次像开始那样采用 scrollView 的宽度。
我已经阅读了关于 SO 中 UIScrollViews 的任何问题,并找到了我所需要的。
【问题讨论】:
【参考方案1】:好的,所以最后我找到了答案,因为 Ismael 建议我必须调整宽度,问题是找到方程式。
缩放的工作方式和滚动视图的子视图的宽度在开始时并不明显。
一旦您在滚动视图中缩放 UIView,并且您希望它具有相同的宽度,您必须将元素的宽度除以比例。
也就是说,如果你的初始宽度是600,一旦你缩放你可以认为宽度已经改变了,你只需要重新调整它到600,但事实并非如此。 600 将自动乘以比例。所以正确的答案是将其调整为 600 / 比例。 在这里我们分开。
现在是代码:
一切都发生在方法中:
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollViewtmp withView:(UIView *)view atScale:(float)scale
首先要去掉模糊的字体:
messageLabel.contentScaleFactor=scale;
在另一种方法中,我保存了 UILabel messageLabel 的初始宽度(在滚动视图内),我将变量称为“initialWidth”,即 600。这很重要,因为我在 scrollViewDidEndZooming 方法中开始使用当前的 messageLabel 宽度一次。
要将scrollview的子视图的宽度重新调整为600,我们只需要将初始宽度除以缩放比例,然后重新调整标签即可:
[messageLabel setFrame:CGRectMake(0,0,(initialWidth/scale), messageLabel.frame.size.height)];
[messageLabel sizeToFit];
此时,我们有了一个可以缩放的scrollview,带有一个将文本重新调整为scrollview初始宽度的Label,我们没有水平滚动条,但是我们有一个问题,垂直滚动条有一个高度错误:我们只能滚动文本的一部分。
这是第二个难以解决的问题。 如果你将 messageLabel 高度传递给 contentsize,奇怪的是它似乎不起作用,即使我得到一个高度乘以我的 NSLogs 中的比例,它也不会改变滚动的高度,就好像在内部它被分割了再次。例如,如果初始高度为 500,在缩放 2 后,我得到 1000 高度,如果我将此值传递给 ContentSize,它保持不变,就好像它再次被 2 整除一样。
所以这次的解决方案是乘以比例。
我们只需要添加这一行:
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, (messageLabel.frame.origin.y+messageLabel.frame.size.height)*scale)];
正如我们所看到的,困难的部分是要理解这个用比例除或乘的混乱。
【讨论】:
@netadictors 我认为您的建议将帮助我解决我的***.com/questions/19728213/… 问题。如何在缩放时设置 UILable 的高度?【参考方案2】:缩放后,UIScrollView
的contentSize
会按比例增加(originalContentSize * zoomScale),所以再次调整时会变小
示例:
你的 scrollView.frame
是 (0, 0, 100, 100),你的 contentSize
是 (100, 100)。
放大到 2.0 后,您的 contentSize
将是 (200, 200)。
然后手动将其置于 (100, 100) 处,这等于 (50, 50) 的 contentSize
没有缩放。
由于 (contentSize.width <= scrollView.frame.size.width
),将不会有水平滚动,并且标签的最右侧部分不可见。
尽量不要调整contentSize
。然后可以滚动,并且用户可以到达整个标签
编辑:重新阅读您的问题,如果您希望标签在缩放后调整并完全可见,除了调整contentSize
之外,您还需要调整messageLabel's
框架。标签应正确包裹自己
【讨论】:
以上是关于缩放UIScrollview可缩放后如何调整UILabel文本的大小的主要内容,如果未能解决你的问题,请参考以下文章
在 UIScrollView 中绘制 UIBezierPath
带有两个图像的 UIScrollview - 保持 1 个图像可缩放和 1 个图像静态(固定大小)
可以实现 UIScrollView 与可缩放和方面适合的内容?