我在各种不同的设置中都遇到了这个问题,无论是使用 IB 还是手动定义约束时。这是当前设置:
我在容器视图中有一个标签和一个文本字段,使用以下视觉格式约束:
H:|-(4)-[label(labelWidth)]-(4)-[editor]-(4)-|
option = NSLayoutFormatAlignAllFirstBaseline
V:|-(4)-[editor]-(4)-|
对于这些约束,标签位于屏幕左上角的容器视图之外(实际上位于导航栏下方)。
当我添加这些约束时:
V:|-(>=4)-[label]-(>=4)-|
标签位于距顶部 4pt 的位置(与新约束匹配)。
在这两种情况下,一旦我点击打开键盘然后再次关闭它的文本字段(无需更改即可),标签与文本字段基线正确对齐。
[编辑:添加了一些截图] 初始状态:
键盘打开:
键盘关闭后正确显示:
在 Xcode 调试器中,基线约束在键盘打开和关闭之前显示为不活动,在键盘打开和关闭之后显示为活动。
似乎直到第一次编辑之后才(正确)计算文本字段的基线。使用 nil、@"" 或某些文本初始化文本字段不会影响行为。
问题是,是什么导致了这种行为,更重要的是,我能做些什么呢?