2014-06-24 15 views
8

Sto usando il metodo viewForHeaderInSection di UITableView, ma ho deciso che la vista sarebbe più gradevole con una opacità ridotta sulla cella di default, dove inizia così:UITableViewHeaderView per difetto su cella, non sopra

how it defaults

mi piacerebbe che di default in questo modo, come se l'utente fosse già scorrere verso il basso (nota, voglio questo per tutte le cellule, non solo quella attualmente in cima la vista).

how i'd like it

ho potuto solo aggiungere la vista come una visualizzazione secondaria della cellula, ad eccezione voglio di mantenere la funzionalità in cui, se la cella è la cella in alto, la vista di testa rimane in cima alla schermata. Forse il modo corretto per farlo è quello di non avere un headerview, e se una cella è la cella superiore calcolare dove l'origine della vista è sulla cellula - anche se questo sembra un modo potenzialmente costoso per farlo, potrebbe essere il solo/migliore.

Grazie.

PSI sto cercando di farlo in modo rapido, ma C obiettivo. Grazie ancora

+0

qualcuno ha raggiunto questo? Sto ancora lottando con esso – Ryan

+0

cosa intendi per tutte le cellule? perché vorresti un'intestazione traslucida per tutte le celle? cosa c'è di sbagliato nel restituire una vista con opacità ridotta da viewForHeaderInSection? E che dire del comportamento come se l'utente fosse già scivolato verso il basso che si desidera riprodurre? Sono io o la tua spiegazione? lol – believesInSanta

+0

sembra che tu voglia solo un semplice header UITableViewStyle traslucido? – believesInSanta

risposta

3

È questo quello che vuoi?

import UIKit 

class ViewController: UITableViewController { 
    var data = [[String]]() 
    var headerOrigins = [CGPoint]() 
    var floatingHeaders = [UIView]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     data = [["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eigth", "Nine", "Ten"], ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eigth", "Nine", "Ten"], ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eigth", "Nine", "Ten"]] 

     tableView.dataSource = self 
     tableView.delegate = self 

     for i in 0..<data.count { 
      headerOrigins += tableView(tableView, cellForRowAtIndexPath: NSIndexPath(forRow: 0, inSection: i)).frame.origin 

      let floatingHeader = UIView(frame: CGRectMake(0, headerOrigins[i].y, tableView.frame.size.width, 44)) 
      floatingHeader.backgroundColor = UIColor.redColor() 
      floatingHeader.alpha = 0.5 

      let label = UILabel(frame: CGRectMake(100, 10, 100, 30)) 
      label.text = "Header \(i)" 
      floatingHeader.addSubview(label) 

      tableView.addSubview(floatingHeader) 

      floatingHeaders += floatingHeader 
     } 

    } 

    override func numberOfSectionsInTableView(tableView: UITableView!) -> Int { 
     return data.count 
    } 

    override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { 
     return data[section].count 
    } 

    override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 
     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell 
     cell.textLabel.text = data[indexPath.section][indexPath.row] 

     return cell 
    } 

    override func scrollViewDidScroll(scrollView: UIScrollView!) { 
     var tableTop = tableView.bounds.origin.y + tableView.scrollIndicatorInsets.top 

     if tableTop < 0 { 
      floatingHeaders[0].frame.origin.y = 0 
     } else { 
      for i in 0..<data.count { 
       if tableTop > headerOrigins[i].y { 
        floatingHeaders[i].frame.origin.y = tableTop 
       } else if tableTop < headerOrigins[i].y { 
        floatingHeaders[i].frame.origin.y = headerOrigins[i].y 
       } 

      var j = i 
      while j > 0 { 
       if (CGRectGetMaxY(floatingHeaders[j-1].frame) > floatingHeaders[j].frame.origin.y) { 
        floatingHeaders[j-1].frame.origin.y = floatingHeaders[j].frame.origin.y - floatingHeaders[j].frame.size.height 
       } 
       j-- 
      } 
     } 
    } 
} 
+0

Questo non viene compilato e seguito con il codice non credo che questo sarebbe default come speravo. Grazie per il tuo tentativo però – Ryan

+0

@Ryan Che errore ricevi? –

+0

@Ryan damn the mini-Markdown! Controlla questo link: http://bit.ly/1spDAYP –

Problemi correlati