Ios 文本高度变化中的快速视觉延迟

Ios 文本高度变化中的快速视觉延迟,ios,swift,view,autolayout,Ios,Swift,View,Autolayout,我有一个带有按钮的主显示屏,当点击该按钮时,它会切换到第二个屏幕。在第二个屏幕中,我有一个带有彩色背景的文本标签,根据使用自动布局/约束的屏幕大小而变化 然后,我使用以下方法更改该标签中字体相对于标签大小的大小: LabelName.font = LabelName.text.fontWithSize(LabelName.frame.height) 这是可行的,但有一个问题。当我在viewDidLoad中放置上述行时,什么也没有发生……文本保持不变。当我把它放在ViewDidDisplay中时

我有一个带有按钮的主显示屏,当点击该按钮时,它会切换到第二个屏幕。在第二个屏幕中,我有一个带有彩色背景的文本标签,根据使用自动布局/约束的屏幕大小而变化

然后,我使用以下方法更改该标签中字体相对于标签大小的大小:

LabelName.font = LabelName.text.fontWithSize(LabelName.frame.height)
这是可行的,但有一个问题。当我在viewDidLoad中放置上述行时,什么也没有发生……文本保持不变。当我把它放在ViewDidDisplay中时,它会改变,但在改变之前,最初的文本大小会在标签上短暂地显示出来

我在这里遇到的问题是,当我进入该屏幕时,我可以看到标签始终是正确的,经过调整的大小(即使在切换期间)。它会根据屏幕大小自行放大…所以既然总是不延迟,那么文本大小行不应该延迟吗?我使用了一些输出行,在ViewDidDisplay中,该标签的边框是原始尺寸,而在ViewDidDisplay中,则是其应立即达到的尺寸。但文本延迟了

我能看到的唯一原因是,自动/布局约束在视图加载后但在其出现之前进行了调整,并且ViewDidDisplay中的实际swift代码仅在视图完成分段并完全显示在屏幕上后执行。但我不确定这是不是真的


请澄清,即使是根据标签大小调整文本而不使用直接代码的更好方法也会非常棒。我在属性中没有看到简单的“根据标签大小调整字体大小”选项。也许有,但我还没有意识到。在直接编写代码之前,任何方法都是不错的,但只是一个通用的解决方案就行了。我只是不想看到那一点点的耽搁。你的理论是正确的。自动布局在
ViewDidLoad()
之后布局视图,您需要在调整字体之前完成此操作。将字体调整代码移动到覆盖
viewDidLayoutSubviews()
的位置,该操作发生在自动布局之后但视图显示在屏幕上之前

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    LabelName.font = LabelName.text.fontWithSize(LabelName.frame.height)
}

第一个ViewDid出现的第三段到最后一段应该是viewDidLoad。抱歉,我不知道你能这么做。谢谢我有一个简单的解决方法,将文本高度保存在NSUserDefaults中,因此在它最初打开后,它每次都知道大小。但这看起来更漂亮、更整洁。再次感谢:)