UIScrollVIew 中的静态对象

Posted

技术标签:

【中文标题】UIScrollVIew 中的静态对象【英文标题】:Static Object in UIScrollVIew 【发布时间】:2012-05-26 16:04:35 【问题描述】:

我的 ios 应用程序的一部分涉及 PDF 阅读器。为了显示用户所在的页面,我创建了一个 UILabel 并将其放置在 PDFScrollView(UIScrollView 的子类)中。这个标签必须在滚动视图中,因为每当我更改页面时,滚动视图都会向标签的 IBOutlet 发送一条消息,告诉它更改其文本。

但是,每当我在 UIScrollView 中放大(滚动“缩小”)时,标签也会缩小(它的大小不会改变,但会向外移动)。这会导致它最终移出屏幕。 如何更改它以使 UILabel 在 UIScrollView 中保持静态且不动?

【问题讨论】:

【参考方案1】:

不要将UIScrollView 子类化,而是将UIView 子类化并将UIScrollViewUIView 作为子视图,而UIView 不是滚动视图的子视图。将您的标签等放在UIView 中,并让父视图管理滚动视图和其他视图之间的通信。

UIView + UIScrollView (your PDFScrollView)
+---------------------------------------+
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-                                       -
-       UIView (not a subview)          -
-       +----------------------+        -
-       -      Label(s)        -        -
-       -                      -        -
-       +----------------------+        -
+---------------------------------------+

【讨论】:

我可以用 UIView 中的所有标签做 ViewController->UIView->UIScrollView 吗? 我添加了一个视觉效果来解释我的意思。 那么UILabel应该是ScrollView的子视图的子视图? 不,UILabel 应该是“浮动”在UIScrollView 上的UIView 的子视图(不是子视图,否则它也会滚动)。这两个视图是一大UIView的子视图。 你的意思是ViewController的默认UIView?【参考方案2】:

在你的UIScrollViewDelegate中,实现方法:

- (void)scrollViewDidZoom:(UIScrollView*)scrollView 

    uiLabel.transform = CGAffineTransformMakeScale(scaleX, scaleY);
    uiLabel.center = CGPointMake(x, y);

正确计算 scaleX、scaleY、X 和 Y 的位置。 您可以尝试将1.0/scrollView.zoomScale 用于scaleXscaleY

在Ray Wenderlich 站点上有一个很好的关于使用UIScrollView 的视图层次结构的教程。

【讨论】:

这并不能解决问题。 仍然有编译问题或者只是 UILabel 一直在缩放?尝试对 scaleX 和 scaleY 使用 1.0。 UILabel 不断缩放。我为每个尝试了 1.0,但没有帮助。 不,那也不行

以上是关于UIScrollVIew 中的静态对象的主要内容,如果未能解决你的问题,请参考以下文章

自动滚动 UIScrollView 以适应原生 iOS Mail.app 中的内容

UiScrollView 高度不正确(没有 AutoConstraint)

缩放和重绘 UIScrollView 内容后设置 contentOffset

在 UIScrollview 中禁用对角线拖动

如何在 ios 中为 UIScrollView 设置对齐方式

更改界面方向时UIScrollView上的奇怪跳转(ATPagingView)