2017-12-08 15 views
0

Also ich habe einen ViewController, der zwei Container Ansichten hat. Der oberste ist der Hauptinhalt. Der untere ist ein Banner, der bei bestimmten Ereignissen versteckt wird.Dual Container Ansicht Animation iOS

Der untere ist so positioniert, dass er unter der Tab-Leiste liegt, bis das Ereignis eintritt.

Wenn das Ereignis eintritt, wird der Rahmen der Hauptansicht verkleinert und der Rahmen des Banners wird neu positioniert, so dass er in die Ansicht "gleitet" und verfügbar wird.

Das Problem, das ich habe, ist, wenn ich nicht die Größe der Hauptansicht im Storyboard ändern (was ich nicht will), jede Größenänderung, die ich im Code mache, enthüllt das Banner, aber das Banner reagiert nicht auf Berührungen. (Die Größe ändert sich im Storyboard, es reagiert.) Es scheint so, als ob eine andere Ansicht davor die Berührungen abfängt, aber was und wie behebe ich es?

Die Hauptansicht-Controller:

func hideBanner() { 
    bannerViewController?.toggleBannerDisplay(show: false) 
    contentTableViewController?.toggleBannerDisplay(show: false) 
} 
func showBanner() { 
    bannerViewController?.toggleBannerDisplay(show: true) 
    contentTableViewController?.toggleBannerDisplay(show: true) 
} 

Die Inhaltstabelle View-Controller:

func toggleBannerDisplay(show: Bool) { 
    let tableView = self.view as! UITableView 

    UIView.animate(withDuration: 0.5, animations: { 
     if self.cancelApplyShowing == false && show == true { 
      let frame = tableView.frame 
      let newFrame = CGRect(x:frame.origin.x , y: frame.origin.y, width: frame.size.width, height: frame.size.height - 48) 
      tableView.contentSize = newFrame.size 
      tableView.frame = newFrame 
      self.cancelApplyShowing = true 
     } else if self.cancelApplyShowing == true && show == false { 
      let frame = tableView.frame 
      let newFrame = CGRect(x:frame.origin.x , y: frame.origin.y, width: frame.size.width, height: frame.size.height + 48) 
      tableView.contentSize = newFrame.size 
      tableView.frame = newFrame 
      self.cancelApplyShowing = false 
     } 
    }) 
} 

Das Banner:

func toggleBannerDisplay(show: Bool) { 
    UIView.animate(withDuration: 0.5, animations: { 
     if self.cancelApplyShowing == false && show == true { 
      let frame = self.view.frame 
      let newFrame = CGRect(x: frame.origin.x, y: frame.origin.y - 48, width: frame.size.width, height: frame.size.height) 
      self.view.frame = newFrame 
      self.cancelApplyShowing = true 
     } else if self.cancelApplyShowing == true && show == false { 
      self.view.frame.origin.y += 48 
      self.cancelApplyShowing = false 
     } 
    }) 
} 

Aus irgendeinem Grund, wenn ich das Hauptansicht Größe ändern, die versteckte Ansicht wird reaktionsfähig (nach Animationen natürlich).

Storyboard Screenshot

Vimeo Video: https://vimeo.com/246496442

Antwort

0

Ich habe versucht, die eingebettete View-Controller Ansichten zu animieren, die alles und an seinen Platz bringen hat, aber der Container Ansicht immer noch unsichtbar über die Oberseite sitzt.

I animiert die Container Ansichten und alles funktioniert jetzt gut.