首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS UITableView 動態居中顯示:reloadData 時根據 contentSize 計算 frame.origin.y

     編輯:程式設計綜合問答

需求:UITableView 始終垂直居中於父視圖,隨行數變化自動調整。每次 reloadData 後根據 contentSize.height 計算新 frame。

核心代碼

- (void)reloadAndCenterTableView {
    [self.tableView reloadData];
    // 強制佈局更新以獲取準確 contentSize
    [self.tableView layoutIfNeeded];
    
    CGFloat tableViewHeight = self.tableView.contentSize.height;
    CGFloat parentHeight = self.view.bounds.size.height;
    CGFloat y = (parentHeight - tableViewHeight) / 2.0;
    y = MAX(y, 0); // 防止負值
    
    CGRect frame = self.tableView.frame;
    frame.origin.y = y;
    frame.size.height = tableViewHeight; // 高度緊湊內容
    self.tableView.frame = frame;
}

調用時機

  • 數據源變更後:[self reloadAndCenterTableView];
  • 若在 viewDidLayoutSubviews 中調用,需防止無限循環(加標誌位)。

Auto Layout 替代方案

// 設置 tableView 垂直居中約束
[tableView.centerYAnchor constraintEqualToAnchor:view.centerYAnchor].active = YES;
// 高度由內容決定
tableView.estimatedRowHeight = 44;
tableView.rowHeight = UITableViewAutomaticDimension;
// 禁止滾動
tableView.scrollEnabled = NO;

Frame 計算靈活直觀,Auto Layout 更聲明式,按項目風格選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved