繁体   English   中英

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

[英]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)];

可以看出,最困难的部分是用除法或乘以比例来理解这种混乱。

缩放后, UIScrollViewcontentSize会按比例增加(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM