我有一个可缩放的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的任何问题,并且找到了我需要的内容。
答案 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
帧。标签应该正确包装