[英]How to resize UILabel text after zooming UIScrollview zoomable
我有一个可缩放的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的宽度。
我已经阅读了有关SOScrollViews的任何问题,并找到了我真正需要的东西。
好的,最后我找到了答案,因为Ismael建议必须调整宽度,问题是找到方程式。
缩放的工作方式和滚动视图的子视图的宽度在开始时并不明显。
一旦在滚动视图中缩放UIView并希望具有相同的宽度,就必须将元素的宽度除以缩放比例。
就是说,如果您的初始宽度为600,则在缩放后就可以认为宽度已更改,您只需要再次将其调整为600,就可以了。 600将自动乘以比例。 因此正确的答案是将其大小调整为600 / scale。 在这里我们分开。
现在的代码:
一切都在方法中发生:
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollViewtmp withView:(UIView *)view atScale:(float)scale{}
第一件事是摆脱模糊的字体:
messageLabel.contentScaleFactor=scale;
在另一种方法中,我保存了UILabel messageLabel的初始宽度(在scrollview内部),我将变量“ initialWidth”称为600。这很重要,因为我在scrollViewDidEndZooming方法中一次使用了当前的messageLabel宽度。
要将滚动视图的子视图的宽度重新调整为600,我们只需要将初始宽度除以zoomscale,然后重新调整标签即可:
[messageLabel setFrame:CGRectMake(0,0,(initialWidth/scale), messageLabel.frame.size.height)];
[messageLabel sizeToFit];
此时,我们有一个可以缩放的滚动视图,带有一个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)];
可以看出,最困难的部分是用除法或乘以比例来理解这种混乱。
缩放后, UIScrollView
的contentSize
会按比例增加(originalContentSize * zoomScale),因此再次调整它时,它会变小
示例:您的scrollView.frame
是( scrollView.frame
),而您的contentSize
是(100,100)。 缩放到2.0后,您的contentSize
将为(200,200)。 然后,您将其手动设置为(100,100),等于无缩放时的contentSize
(50,50)。
由于( contentSize.width <= scrollView.frame.size.width
),将不会进行水平滚动,并且标签的最右边部分也不可见。
尝试不调整contentSize
。 这样就可以进行滚动,并且用户可以到达整个标签
编辑:重新阅读您的问题,如果要调整标签并使其在缩放后完全可见,除了调整contentSize
之外,您还需要调整messageLabel's
框架。 标签应正确缠绕
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.