当viewController的视图变得可见时,视图框架未正确设置

时间:2015-09-01 15:45:52

标签: ios layout uiviewcontroller nslayoutconstraint viewdidappear

我正在将imageView添加到已存在的imageView中以完全覆盖它。这是代码,但我不希望你完全理解它,因为它是一团糟而且不是很重要。

var customImageView = returnImageViewWithIdentifier(imageViewIdentier)!

                    customImageView.bounceImageViewBounds = CGRect(origin: CGPointMake(0, 0), size: CGSize(width: customImageView.frame.width, height: customImageView.frame.height))
                    customImageView.bounceImageView = UIImageView(frame: customImageView.bounceImageViewBounds)
                    customImageView.bounceImageView.image = UIImage(named: nameOfImage)
                    customImageView.hasImage = true

                    customImageView.startImageViewFrame = customImageView.frame

                    customImageView.middleView = UIView(frame: customImageView.startImageViewFrame)
                    customImageView.bounceImageView.clipsToBounds = true
                    customImageView.bounceImageView.layer.cornerRadius = 3


                    self.cubeView.addSubview(customImageView.middleView)
                    customImageView.middleView.addSubview(customImageView.bounceImageView)

快速回顾:customImageView被bounceImageView遮挡,后者是customImageView的变量。它并不重要。

当使用此代码实现按钮的IB动作方法并按下时,它可以很好地完成。当它在viewDidLoad,viewDidAppear,vievDidLayoutSubviews中执行时会中断。 bounceImageView(隐藏customImageView的那个)向右移动了一点或大约英寸(2.54cm),具体取决于我执行此代码的位置。它不会完全掩盖它下面的imageView。在已经设置了所有布局(例如,当我按下按钮)后执行代码时,它的功能就像它应该的那样。

我觉得这与评估约束有关。。由于应用程序误解了所有视图的位置,因此未正确设置顶视图的框架。我真的很感激这些问题的一些调试信息或可能的解决方案。

1 个答案:

答案 0 :(得分:0)

我已将代码放在此函数的闭包中,并在viewDidAppear中调用它。

func delay(delay:Double, closure:()->()) {
        dispatch_after(
            dispatch_time(
                DISPATCH_TIME_NOW,
                Int64(delay * Double(NSEC_PER_SEC))
            ),
            dispatch_get_main_queue(), closure)
    }

我不知道为什么会这样。即使我将延迟设置为0.0,它仍然有效。主要螺纹接缝以取悦系统。