如何在缩放后调整UILabel文本的大小UIScrollview可缩放



我有一个可缩放的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的问题,并找到了我需要的东西。

好的,所以最终我找到了答案,因为Ismael建议我必须调整宽度,问题是找到方程。

缩放的工作方式和滚动视图子视图的宽度在一开始并不明显。

一旦在滚动视图中缩放UIView,并且希望其宽度相同,就必须将元素的宽度除以缩放比例。

也就是说,如果你最初的宽度是600,一旦你缩放,你可以认为宽度已经改变了,你只需要再次将其调整为600,但事实并非如此。600将自动地乘以刻度。因此,正确的答案是将其调整为600/scale。在这里我们分开。

现在的代码:

一切都发生在方法中:

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollViewtmp withView:(UIView *)view atScale:(float)scale{}

第一件事是去除模糊的字体:

messageLabel.contentScaleFactor=scale;

在另一种方法中,我保存了UILabel消息标签的初始宽度(在滚动视图中),我调用了变量"initialWidth",即600。这一点很重要,因为我在scrollViewDidEndZooming方法中开始使用当前的messageLabel宽度一次。

要将滚动视图的子视图的宽度重新调整为600,我们只需将初始宽度除以缩放比例,并重新调整标签:

[messageLabel setFrame:CGRectMake(0,0,(initialWidth/scale), messageLabel.frame.size.height)];
[messageLabel sizeToFit];

在这一点上,我们有一个可以缩放的滚动视图,带有一个标签,可以将文本重新调整到滚动视图的初始宽度,我们没有水平滚动条,但我们有个问题,垂直滚动条的高度错误:我们只能滚动文本的一部分。

这是第二个很难解决的问题。如果您将messageLabel高度传递给contentsize,奇怪的是,它似乎不起作用,即使我在NSLogs中得到一个高度乘以刻度,它也不会改变滚动的高度,就好像在内部再次划分一样。例如,如果初始高度是500,缩放2后,我得到1000高度,如果我将该值传递给ContentSize,它将保持不变,就像它再次除以2一样。

所以这次的解决方案是乘以比例。

我们只需要添加以下行:

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, (messageLabel.frame.origin.y+messageLabel.frame.size.height)*scale)];

正如所看到的,困难的部分是理解这种混乱的除以或乘以比例。

缩放后,UIScrollViewcontentSize按比例增加(originalContentSize*zoomScale),因此当您再次调整时,它将变小

示例:您的scrollView.frame是(0,0,100,100),而您的contentSize是(100,100。缩放到2.0后,contentSize将为(200200)。然后手动将其设置为(100,100),这等于不缩放的contentSize(50,50)。

由于(contentSize.width <= scrollView.frame.size.width),将不会进行水平滚动,并且标签的最右侧部分不可见。

尽量不要调整contentSize。滚动将成为可能,然后用户可以到达整个标签

编辑:重新阅读您的问题,如果您希望标签在缩放后进行调整并完全可见,那么除了调整contentSize之外,您还需要调整messageLabel's帧。标签应正确包装

最新更新