Swift: UIView.insertSubview(, aboweSubview) не работает на iOS 8

Это беспокоит меня уже несколько часов, и я не могу найти решение:(.

у меня есть UITableViewи когда я нажимаю на строку, я хочу показать подробную информацию для этой строки в "Карточке". Я добавляю карту в окно ключа, потому что хочу, чтобы она была выше UINavigationBarи иметь прозрачный вид на фоне карты

Вот так выглядит мой код

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.vwCard.removeFromSuperview()

    let keyWindow = UIApplication.sharedApplication().keyWindow
    let screen = UIScreen.mainScreen().bounds

    vwTransparentView = UIView(frame: screen)
    vwTransparentView.backgroundColor = UIColor.blackColor()
    vwTransparentView.hidden = true
    vwTransparentView.userInteractionEnabled = false

    keyWindow?.addSubview(self.vwCard)
    keyWindow?.insertSubview(self.vwTransparentView, belowSubview: self.vwCard)


    vwCard.center = CGPointMake((screen.width/2), (screen.height/2))
    vwCard.hidden = true

    vwCard.layer.borderColor = UIColor.whiteColor().CGColor
}

Когда я нажимаю на UITableView грести это происходит

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    vwCard.hidden = false
    vwCard.alpha = 0
    vwTransparentView.alpha = 0
    vwTransparentView.hidden = false
    vwCard.transform = CGAffineTransformMakeScale(1.2, 1.2)
    UIView.animateWithDuration(0.3, animations: { () -> Void in
        self.vwCard.alpha = 1
        self.vwCard.transform = CGAffineTransformIdentity
        self.vwTransparentView.alpha = 0.4
    })

}

Так выглядит экран в iOS 7 (7.1)

введите описание изображения здесь

И вот как это выглядит в iOS 8 (8.3)

введите описание изображения здесь

Я хочу, чтобы в iOS 8 все выглядело так же, как в iOS 7. Не знаю, почему keyWindow?.insertSubview(self.vwTransparentView, belowSubview: self.vwCard) не работает. Я также попробовал это наоборот insertSubview( ,aboweView:)

1 ответ

Решение

Видимо, мне нужно было переместить код в viewDidLayoutSubviews()

Также я добавил строку vwCard.setTranslatesAutoresizingMaskIntoConstraints(true)

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    self.vwCard.removeFromSuperview()

    let keyWindow = UIApplication.sharedApplication().keyWindow
    let screen = UIScreen.mainScreen().bounds

    vwTransparentView = UIView(frame: screen)
    vwTransparentView.backgroundColor = UIColor.blackColor()
    vwTransparentView.hidden = true
    vwTransparentView.userInteractionEnabled = false

    keyWindow?.addSubview(self.vwCard)
    keyWindow?.insertSubview(self.vwTransparentView, belowSubview: self.vwCard)


    vwCard.center = CGPointMake((screen.width/2), (screen.height/2))
    vwCard.hidden = true
    vwCard.setTranslatesAutoresizingMaskIntoConstraints(true)

    vwCard.layer.borderColor = UIColor.whiteColor().CGColor
}
Другие вопросы по тегам