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

时间:2012-11-23 13:48:09

标签: ios uiscrollview scrollview zooming

我有一个可缩放的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的任何问题,并且找到了我需要的内容。

2 个答案:

答案 0 :(得分:1)

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

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

在滚动视图中缩放UIView后,如果想要具有相同的宽度,则必须将该元素的宽度除以比例。

也就是说,如果您的初始宽度为600,一旦缩放,您可以认为宽度已经改变,您只需将其再次调整为600,但事实并非如此。 600将自动乘以比例。所以正确的答案是将其调整为600 /规模。 在这里我们分开。

现在代码:

一切都在方法中发生:

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

首先要摆脱模糊的字体:

 messageLabel.contentScaleFactor=scale;

在另一个方法中,我保存了UILabel messageLabel的初始宽度(在scrollview内部),我调用了变量“initialWidth”,即600.这很重要,因为我在scrollViewDidEndZooming方法中开始使用当前的messageLabel宽度。

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

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

此时,我们有一个可以缩放的scrollview,一个Label将文本重新调整到scrollview的初始宽度,我们没有水平滚动条,但是我们有一个问题,垂直滚动条有一个错误的高度:我们只能滚动文本的一部分。

这是一个难以解决的第二个问题。 如果你将messageLabel高度传递给contentsize,奇怪的是它似乎没有用,即使我得到一个高度乘以我的NSLogs中的比例,它也不会改变滚动的高度,就像在内部它被分割一样再次。例如,如果初始高度为500,则在缩放2之后,我得到1000个高度,如果我将此值传递给ContentSize,它将保持不变,就像它再次被2分割一样。

所以解决方案是这个时候乘以比例。

我们只需要添加这一行:

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

如图所示,困难的部分是通过划分或乘以比例来理解这个混乱。

答案 1 :(得分:0)

缩放后,contentSize的{​​{1}}会按比例增加(originalContentSize * zoomScale),因此当您再次调整时,它会变小

实施例: 您的UIScrollView是(0,0,100,100),scrollView.frame是(100,100)。 缩放到2.0后,contentSize将为(200,200)。 然后你手动将它放在(100,100),这相当于{50}的contentSize而没有缩放。

由于(contentSize),因此不会进行水平滚动,并且标签的最右侧部分不可见。

尝试不调整contentSize.width <= scrollView.frame.size.width。然后可以滚动,用户可以到达整个标签

修改:重新阅读您的问题,如果您希望调整标签并在缩放后完全可见,除了调整contentSize之外,您需要做的是调整contentSize帧。标签应该正确包装