Ios 设置容器高度更改动画时,容器视图中的UIPickerView不调整大小

Ios 设置容器高度更改动画时,容器视图中的UIPickerView不调整大小,ios,autolayout,uipickerview,uicontainerview,Ios,Autolayout,Uipickerview,Uicontainerview,使用IB,我在容器视图的关联UIViewController中设置了UIVPicker。容器的高度由两个自动布局约束控制,一个将高度设置为零,另一个将其设置为与其superview的高度相同。我更改其中一个约束的优先级以切换活动/非活动。在IB中,优先级设置为选择器的初始高度为零(全高度约束优先级750;零高度约束优先级751) 当我激活全高度约束时,我可以看到它正在生效:UIPickerView具有彩色背景。我可以看到背景扩展到superview的高度。奇怪的是:UIPickerView自己的

使用IB,我在容器视图的关联UIViewController中设置了UIVPicker。容器的高度由两个自动布局约束控制,一个将高度设置为零,另一个将其设置为与其superview的高度相同。我更改其中一个约束的优先级以切换活动/非活动。在IB中,优先级设置为选择器的初始高度为零(全高度约束优先级750;零高度约束优先级751)

当我激活全高度约束时,我可以看到它正在生效:UIPickerView具有彩色背景。我可以看到背景扩展到superview的高度。奇怪的是:UIPickerView自己的子视图(选择器标题、选择栏等)没有随着选择器自己的背景调整大小。我可以看到它们都聚集在选择器显示屏的顶部,大约30个像素。我已经验证了,当我使用XCode在调试时显示层的功能切换约束时,我看到的是拾取者的背景

如果我在IB中将零高度约束优先级设置为749,以允许全高度约束处于活动状态,然后在出现pickerView后通过在ViewDidDisplay中放置以下内容来“隐藏”pickerView

self.pickerContainerViewHeightConstraintZeroHeight.priority = 751;
[self.pickerContainerView layoutIfNeeded];
…然后选择器内容将正确显示。(这是一个仅用于诊断的解决方案,因为用户看到选择器闪烁,然后消失。)然后我可以随意隐藏和显示选择器,它继续保持应有的外观。如果我在viewDidLayoutSubviews或ViewWillDisplay中放入相同的代码,试图将其转化为“真正的”解决方案,则当我显示它时,选择器会出错

下面的内容确实有用,但它真的很难看。。。在IB中将零高度约束优先级设置为749,以允许激活全高度约束,然后

- (void )viewWillAppear:
{
     self.pickerContainerView.hidden = YES;
 }

- (void )viewDidAppear:
{
    self.pickerContainerViewHeightConstraintZeroHeight.priority = 751;
    [self.pickerContainerView layoutIfNeeded];
    self.pickerView.hidden = NO;
 }
…这相当于让视图在构建时为全高,使用隐藏属性将其隐藏,以便用户一开始看不到它,将其高度更改为零,“显示”它(用户不会看到,因为高度现在为零),以便下次将高度更改为全高时,选择器正确显示


但必须有更好的办法。如何从选择器高度=0开始,并在通过更改约束显示时仍然使其具有正确的外观?

是否需要
[self.pickerView.superview layoutifneed]
做得更好?Rob。不,这表明了同样的行为。请参阅我编辑的问题版本。我意识到我应该包括更多的信息。是否需要
[self.pickerView.superview layoutifneed]
做得更好?Rob。不,这表明了同样的行为。请参阅我编辑的问题版本。我意识到我应该包括更多的信息。