除非模态视图显示在顶部,否则将UIView滑动到屏幕上将不会居中

时间:2014-07-23 03:33:27

标签: ios objective-c uiview

我有一个UIView(slidingView2),我正在滑动到屏幕上。我已将slidingView2设置为水平居中在屏幕上。当屏幕上的滑动发生时,视图最终不在水平中心,而是向右10个像素,部分离开屏幕。

但如果我在此屏幕上方显示任何其他模态视图,则关闭模式视图,slideView2位于屏幕中央。

这是用故事板和约束构建的。

它就像显示模态视图一样使slideView2重绘然后将其放在正确的位置?

另一个奇怪的事情是模态屏幕可以随时随地显示。我的意思是,我的slideView2是我滑到屏幕上的第二个视图。如果我在应用程序启动后立即显示随机模态屏幕,则显示slidingView_1然后slideView2,然后slidingView2正确居中。或者,如果我从应用程序启动中删除模态屏幕并在slidingView_1之后但在slideView2之前显示它,那么slidingView2正确居中。因此,只要在slideView2之前的任何时候显示任何模态屏幕,那么slidingView2将正确居中。

有人有任何建议吗?

编辑:

我在这个方面的选择是显示一个transpartent模态视图然后把它带走(即巨大的丑陋黑客)。

或者调用一些使视图完全重绘的方法。我试过这两个都没有用。

    [self.view setNeedsLayout];
    [self.view layoutIfNeeded];

任何人都知道如何立即重新制作视图?

其他代码: //这里我创造了视图,但关闭了屏幕

-(void)willCreateAndSetupPickLocView {

self.pickLocationView.alpha = 0.0f;
[self willSetupUIForPickLocation];

self.confirmPickupLocationViewLeftsideConstraint.constant = 380.0;
[self.view setNeedsUpdateConstraints];

[UIView animateWithDuration:0.0f animations:^{

    [self.view layoutIfNeeded];

}];
}

//这就是我现在的动画

   -(void)showSetPickupHoverView {

self.pickLocationView.alpha = 1.0f;
[self layoutBackButton];

if(nil == self.pickLocationView) {

    [self willCreateAndSetupPickLocView];
}


self.confirmPickupLocationViewLeftsideConstraint.constant = 10.0f;
[self.view setNeedsUpdateConstraints];

[UIView animateWithDuration:0.7f animations:^{
    [self.view layoutIfNeeded];
    self.pinMarkerView.hidden = NO;
}];
}

1 个答案:

答案 0 :(得分:0)

问题是没有为滑动视图设置宽度,高度,左,右,顶部和底部的常量,也没有为所有子视图设置这些常量。解决方案只是开始为所有这些添加常量。

如果您不想逐个手动添加,请执行以下操作。

编辑>解决所有布局问题