2016-05-31 11 views
0

Ich versuche, eine UIView - PopupView an der Spitze, und eine weitere UIView (OpaqueView) unter PopupView aber über alles andere. PopUpView ist mit einem Outlet verbunden.Bringen Sie Subview über alles, aber unter einem anderen UIView

func display() { 
    popupView.center = CGPointMake(CGRectGetMidX(self.view.bounds), tableView.center.y); 
    self.view.addSubview(popupView) 
    popupView.clipsToBounds = true 

    let opaqueView = UIView() 
    let screenSize: CGRect = UIScreen.mainScreen().bounds 
    opaqueView.frame.size = CGSize(width: screenSize.width, height: screenSize.height) 
    opaqueView.alpha = 0.6 
    UIApplication.sharedApplication().keyWindow!.insertSubview(opaqueView, belowSubview: popupView) 
} 

Mit diesem Ansatz bewirkt, dass die opaqueView über alles, einschließlich der popupView platziert zu werden. Stattdessen möchte ich popupView oben opaqueView haben, aber halten opaqueView über alles andere (Ansicht, TabBar, NavBar)

+0

Warum fügen Sie "' popupView "zu' self.view' hinzu, aber 'opaqueView' zum' keyWindow'? – kennytm

+0

Weil, wenn ich nicht 'opaqueView' zu' keyWindow' hinzufüge, 'opaqueView' nicht über TabBar und NavigationBar. – senty

+1

Warum nicht auch popupView zu keyWindow hinzufügen? – kennytm

Antwort

1

parent.insertSubview(child, belowSubview: sibling) funktioniert nur, wenn die sibling ein direkter Nachkomme von parent ist, so dass child und sibling die gleiche Mutter . Der aktuelle Code funktioniert nicht, da opaqueView (das Kind) und popupView (das sbiling) unterschiedliche Eltern haben.

Das bedeutet entweder ① popupView die keyWindow als Mutter verwenden sollten, oder ② opaqueView sollte self.view als Mutter verwenden. Da Sie opaqueView über alles sein wollen, ist Option ① die einzige Lösung.

Verwandte Themen