在子视图的drawRect之后刷新父UIScrollView contentSize

|| 我有一个UIScrollView,其中有一个UIView。 在确定需要显示的所有子视图之前,我不知道子视图的大小,并且在以后的图形中这可能会改变。 (它具有逐点添加的表格,文本等)。因此,我需要在子视图的drawRect完成时更新滚动视图的内容大小。 在drawRect之后,是否有一种触发所需的[myScrollView setContentSize]和[mySubView setNeedsDisplay]的好方法(此方法调用drawRect,所以我将采取措施避免无限循环),或者在这种情况下实际可用的任何其他解决方案? 在执行内容大小更改之前,似乎需要在子视图上调用setNeedsDisplay。我要做的就是从子视图的drawRect设置setContentSize,然后按下触发setNeedsDisplay的按钮,然后contentSize刷新。因此,我可以只设置一个计时器,然后等待下一个运行循环来执行setNeedsDisplay吗?但这是一个可怕的骇客。另外,我猜想,如果UIKit依赖于视图层次结构在绘制视图层次结构的中间保持不变,则调整从子视图的drawRect调用的代码中内容大小的大小是不行的。     
已邀请:
您可以使用NSNotification。 在图形代码的末尾,发布通知。
        [[NSNotificationCenter defaultCenter] 
                      postNotificationName:@\"drawingLoopDone_Notification\"
                                    object:nil];
将适当的视图控制器添加为通知的NSObserver。
  [[NSNotificationCenter defaultCenter] 
          addObserver:self 
             selector:@selector(setNeedsDisplay)
                 name:@\"drawingLoopDone_Notification\" 
               object:nil];
收到通知后(或在您的viewDidUnload中),按如下所示清理通知侦听器:
    [[NSNotificationCenter defaultCenter] 
                removeObserver:self name:@\"drawingLoopDone_Notification\" object:nil];
    
我刚去...
[theView performSelector:@selector(someSelector) withObject:nil afterDelay:0.0];
...这至少会使hack工作,因为直到drawRect完成后才调用选择器,因此显然不需要的setNeedsDisplay(导致另一个drawRect,并进行检查以避免循环)不会被取消。 当您在绘制子视图之前不知道滚动视图子视图的大小时,我还是很想听听是否有更标准的方法来更新滚动视图的内容大小。     

要回复问题请先登录注册