0

我很好奇我们设置时实际调用了什么方法self.navigationItem.hidesBackButton = YES/NO;。我很好奇,因为该属性不是方法,当我们为任何值分配实际在后台运行的值时,它可以立即隐藏或显示后退按钮。我一直在想有一个运行循环可以不断检查这样的东西。

4

1 回答 1

0

来自 Apple 文档

视图绘制周期 UIView 类使用按需绘制模型来呈现内容。当视图首次出现在屏幕上时,系统会要求它绘制其内容。系统捕获此内容的快照并将该快照用作视图的视觉表示。如果您从不更改视图的内容,则可能永远不会再次调用视图的绘制代码。快照图像用于大多数涉及视图的操作。如果您确实更改了内容,则会通知系统视图已更改。然后视图重复绘制视图并捕获新结果的快照的过程。

当您的视图内容发生变化时,您不会直接重绘这些更改。相反,您可以使用 setNeedsDisplay 或 setNeedsDisplayInRect: 方法使视图无效。这些方法告诉系统视图的内容发生了变化,下次有机会需要重新绘制。在启动任何绘图操作之前,系统会一直等到当前运行循环结束。这种延迟使您有机会一次性使多个视图无效、在层次结构中添加或删除视图、隐藏视图、调整视图大小和重新定位视图。您所做的所有更改都会同时反映

因此,由于 UIKit 基于 MVC,当您设置此属性时,当前视图的模型会发生变化。

然后,在下一次运行 Loop中,视图重绘,然后您会看到它是否隐藏。

这个调用背后的方法是由 iOS 自动调用来重绘的,也许是一些私有的重绘方法。

希望这会帮助你

于 2015-05-13T03:30:34.407 回答