Apprezzo che questa è una vecchia domanda. Ma ho trovato le risposte sia con informazioni false in frammenti in parte che non chiari. Quindi per quello che vale ancora, ecco come ho aggiunto una vista "mobile" alla parte inferiore della vista del mio UITableViewController
. Sì, puoi farlo anche se le risposte accettate dicono che non puoi.
Nel metodo -viewDidLoad
, è possibile creare una vista che chiameremo bottomFloatingView. Anche questo è impostato come una proprietà.
Assicurati di aggiungere un riquadro di contenuto nella parte inferiore della visualizzazione tabella, questo eviterà di nascondere qualsiasi contenuto della tabella con la visualizzazione mobile.
Successivamente, è necessario utilizzare UIScrollViewDelegate
per aggiornare il frame della vista mobile.
L'illusione è che la tua vista è incollata sul fondo. In realtà, questa vista si sta spostando tutto il tempo in cui si sta scorrendo e viene sempre calcolata per apparire in basso. Le visualizzazioni di scorrimento sono molto potenti! E probabilmente sono una delle classi UIKit più sottovalutate che penso.
Quindi ecco il mio codice. Annotare la proprietà, il contenuto inserito nella visualizzazione tabella e l'implementazione del metodo delegato -scrollViewDidScroll:
. Ho creato la mia vista mobile nel mio storyboard, motivo per cui non riesci a vederlo configurato.
Inoltre, non dimenticare che probabilmente dovresti usare anche KVO per osservare le modifiche alla cornice della tabella. È possibile che questo cambi nel corso del tempo, il modo più semplice per verificare è quello di attivare e disattivare la barra di stato in chiamata nel simulatore.
L'ultima cosa, se stai usando le viste di intestazione di sezione nella tua vista tabella, quelle viste saranno la vista più in alto nella vista tabella, quindi dovrai anche portare la vista mobile in primo piano, fallo quando cambi la sua cornice.
@interface MyTableViewController()
@property (strong, nonatomic) IBOutlet UIView *bottomFloatingView;
@end
@implementation MyTableViewController
static NSString *const cellIdentifier = @"MyTableViewCell";
- (void)dealloc
{
[self.tableView removeObserver:self forKeyPath:@"frame"];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView addSubview:self.bottomFloatingView];
self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, CGRectGetHeight(self.bottomFloatingView.bounds), 0.0);
self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, CGRectGetHeight(self.bottomFloatingView.bounds), 0.0);
[self.tableView addObserver:self
forKeyPath:@"frame"
options:0
context:NULL];
}
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row];
return cell;
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self adjustFloatingViewFrame];
}
#pragma mark - KVO
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if([keyPath isEqualToString:@"frame"]) {
[self adjustFloatingViewFrame];
}
}
- (void)adjustFloatingViewFrame
{
CGRect newFrame = self.bottomFloatingView.frame;
newFrame.origin.x = 0;
newFrame.origin.y = self.tableView.contentOffset.y + CGRectGetHeight(self.tableView.bounds) - CGRectGetHeight(self.bottomFloatingView.bounds);
self.bottomFloatingView.frame = newFrame;
[self.tableView bringSubviewToFront:self.bottomFloatingView];
}
@end
note ... http://stackoverflow.com/questions/8258216/position-a-uiview-relative-to-the-bottom-of-the-parent-view/20287309#20287309 – Fattie
penso tutte le risposte di seguito sono confuse. Quello che fai è aggiungere la tua vista alla superview della vista tabella. Semplice come quella. – Jonny