2017-03-03 5 views
0

Nach Hinzufügen einer Fußzeile zur Tabellenansicht, wenn die Tabelle nur eine Zelle hat, zeigt die Fußzeile ein wenig hoch, nur am unteren Rand der Zelle. Wie kann es am Fuß der Tabellenansicht angezeigt werden, egal wie viele Zellen der Tisch hat?ein Problem über UITableFooterView

+0

Die Position der Tabellenfussansicht hängt davon ab, wie viele Abschnitte/Zellen und die Höhe Ihrer Zelle. Wenn Sie die Fußzeile immer am Fuß der Tabellenansicht haben möchten, kann Ihnen nur die benutzerdefinierte Ansicht helfen. –

+0

das funktioniert nicht. Wenn ich der Tabellenansicht gleichzeitig eine benutzerdefinierte Ansicht hinzufüge, gibt es viele Zellen in der Tabelle und die benutzerdefinierte Ansicht wird nie unterhalb der letzten Zelle angezeigt. – Terminater

Antwort

0

footerView ist nur der Hintergrund, fügen Sie eine Ansicht, die Sie wirklich wollen, wie folgt aus:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { 
    return 100 
} 

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { 

    let footerView = UIView.init() 
    footerView.backgroundColor = .red 

    // footerView is just the background, add a view that you really want 
    let subView = UIView.init(frame: CGRect.init(x: 20, y: 20, width: UIScreen.main.bounds.width - 40, height: 100 - 40)) 
    subView.backgroundColor = .yellow 
    footerView.addSubview(subView) 

    return footerView 
} 
+0

Die Frage ist markiert Objective-C. Bitte geben Sie Antworten in der entsprechenden Sprache ab. – rmaddy

+0

ich ein Etikett auf diese Weise zurückgeben, funktioniert nicht. Die Fußzeile wird immer unter der letzten Zelle angezeigt. Wenn die erste Zelle auch die letzte ist, wird die Fußzeile etwas hoch angezeigt. Hinzufügen von Unteransichten zur Fußzeile kann ihre Position nicht ändern. – Terminater

+0

geben Sie eine Ansicht mit einem Label zurück. Sie können den Rahmen der return view nicht ändern, aber Sie können die Position des Labels ändern –

0

Hier ist mein Code Blick auf tableFooterView und seine adaequat einzustellen.

@property (weak, nonatomic) IBOutlet UITableView *tblView; 
@property (weak, nonatomic) IBOutlet UIView *viewTableFooterView; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _tblView.tableFooterView = _viewTableFooterView; 
    _tblView.backgroundColor = [UIColor greenColor]; 
    [_tblView reloadData]; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 10; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"SimpleTableItem"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 

    cell.textLabel.text = [NSString stringWithFormat:@"%ld",(long)indexPath.row]; 
    return cell; 
} 

Überprüfen Sie den Code und lassen Sie mich wissen, wenn es nicht für Sie arbeitet.

+0

danke, aber ich denke, Sie haben nicht meinen Gedanken – Terminater

0

Dies tritt auf, weil die Fußzeile, die Sie hinzufügen, die Fußzeile des Inhalts ist, den Sie innerhalb der UITableView anzeigen. Davon abgesehen gibt es eine Möglichkeit, die gewünschte Ausgabe zu erhalten. Sie können eine UIView unter die im Storyboard hinzugefügte UITableViewCell ziehen, damit sie als Fußzeile angezeigt wird.

Setup-Einschränkungen für die UILabel oder irgendetwas, was Sie im Hinblick auf diese Ansicht zeigen möchten, was ich meine ist, keine feste Höhe Einschränkungen hinzufügen, sonst werden Sie lästige Layout breaking Warnungen bekommen. Machen Sie ein Duplikat dieser Fußzeilenansicht und fügen Sie es Ihrem Fuß UITableView hinzu und fügen Sie eine feste Höhe hinzu, um es als eine Kopie der Fußzeilenansicht zu erstellen, die Sie innerhalb der UITableView hinzugefügt haben. von wie diese Sorte:

enter image description here

nun ein Ventil für diese Höhe Einschränkung der Fußzeile Blick in Ihre UIViewController erstellen.

Jetzt in Ihrem viewDidLoad was Sie tun können, ist zu überprüfen, ob die Höhe des UITableView nach Zugabe der Zellen weniger als Bildschirm Grenzen und gehen entsprechend vor, wie folgt aus:

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    //dont show footer view if cells are within screen bounds 
    if (numberOfCells * cellHeight < [UIScreen mainScreen].bounds.size.height){ 

     UIView *footerView = mainTableView.tableFooterView; 

     CGRect tempFrame = footerView.frame; 

     tempFrame.size.height = 0.0f; 

     footerView.frame = tempFrame; 

     mainTableView.tableFooterView = footerView; 

    }else{ 

     //dont show footerview below table view if cells are outside screen bounds 
     [footerHeightConstraint setConstant:0.0f]; 
    } 

} 

Hinweis: ich verpasst haben ein Kantenfall, der sich auf die Höhe bezieht, wie das Produkt aus Zeilen * Höhe, die gleich oder weniger als Bildschirmgrenzen ist, also müssen Sie sich das ansehen.

+0

gute Idee.Aber das bedeutet nur UITablefooterview kann dies nicht erreichen? – Terminater

+0

Soweit ich weiß, nein. Welches Verhalten Sie auch immer sehen, ist das Standardverhalten. – Rikh