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

iOS UITableViewController 中調整 TableView 寬度並避免黑邊

     編輯:程式設計綜合問答

問題

在 UITableViewController 中直接修改 tableView.frame 導致標題欄未同步移動、兩側出現黑邊。

解決方案:在 viewDidAppear 中設置 frame 並設窗口背景色

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // 1. 此時佈局已完成,修改 frame 生效
    [self.tableView setFrame:CGRectMake(x, y, width, height)];
    
    // 2. 消除黑邊:設置關鍵窗口背景為白色
    [[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor whiteColor]];
}

原理

  • viewDidAppear: 視圖層級已就位,修改 frame 不會被後續佈局覆蓋。
  • UITableViewController 的 view 即為 tableView,父視圖為窗口根視圖,窗口背景色透出即為黑邊。

更佳實踐:改用 UIViewController + 手動添加 TableView

@interface CustomTableVC : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) UITableView *tableView;
@end

@implementation CustomTableVC
- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    [self.view addSubview:self.tableView];
    // 此時可隨意調整 self.tableView.frame,無副作用
}
@end

擺脫 UITableViewController 的諸多隱式約束,靈活性更高。

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