以编程方式更改表的大小

Posted

技术标签:

【中文标题】以编程方式更改表的大小【英文标题】:Programmatically change Size of Table 【发布时间】:2014-07-17 14:30:04 【问题描述】:

故事板:http://s7.directupload.net/images/140717/z5hwmezv.png

大家好, 我有一个应用程序会递归地触发相同的 tableview 控制器(假设其中有文件和文件夹),直到您触发文件而不是文件夹。单击文件时,它会跳转到 GLKit 视图控制器。

现在我想以编程方式调整 tableView 的大小,但这是行不通的。我已经得到了窗口大小,我将用它来计算 tableView 的位置和大小:

CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

我尝试了不同的方法来改变大小,如下所示,这不会改变任何东西。

mainTableView.frame = CGRectMake(0, 0, screenWidth, screenHeight);

如果我以编程方式创建 mainTableView,但随后我的 segue 被删除,我没有找到任何以编程方式创建 segue 的解决方案。

如果您能帮我找到一个适用于情节提要 tableView 的解决方案,那就太好了。

【问题讨论】:

如果您的故事板使用自动布局,那么您需要影响约束而不是框架。 这是一个 UITableViewController 还是只是 UIViewController 中的一个 UITableView? mainTableView 是 UIViewController 内的 UITableView:@interface CustomersList : UIViewController IBOutlet UITableView *mainTableView; 自动布局被选中。 在情节提要中使用 Autoresize Subviews 或 Clip Subviews。 【参考方案1】:

第一步:添加委托 UITableViewDataSource,UITableViewDelegate

@interface viewController: UIViewController<UITableViewDataSource,UITableViewDelegate>

   UITableView *tableView;

第 2 步:

-(void)viewDidLoad

tableView=[[UITableView alloc]init];
tableView.frame = CGRectMake(10,30,320,400);
tableView.dataSource=self;
tableView.delegate=self;
tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
[tableView reloadData];
[self.view addSubview:tableView];


第 3 步:tableview 的属性

//-- For table sections

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

   return 1;


//-- For no of rows in table

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

   return 10;

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return 1;


//-- Table header height if needed

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

   return 50;


//-- Assign data to cells

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier   forIndexPath:indexPath] ;

   if (cell == nil)
   
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   
   cell.textLabel.text=[your_array objectAtIndex:indexPath.row]; ***(or)*** cell.textLabel.text = @"Hello";
   return cell;


//-- Operation when touch cells

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

   // Your custom operation

【讨论】:

这个答案如何尝试回答 OP 的问题? 请以编程方式添加表格视图。所以我提到了方式。 嗨,Nazim,感谢您的回答。我以编程方式创建了 tableView。但是现在我遇到了问题,我的两个 segues 也被删除了。我不知道如何在情节提要中没有表格的情况下创建转场:/ 我取消了表格的删除,并在情节提要控制器中将其缩小到 0 高度。它现在在以编程方式创建的表后面,所有的 segues 都工作正常。不是完美的解决方案,但我猜它有效?【参考方案2】:

看你的照片让我觉得你的 CustomerListVC 是一个 UITableView 子类,这意味着 tableview 是根视图,如果你使用基于 UINavigationController 的流程,那么你不能轻易调整根视图的大小。

你可以做的是将 UITableView 放在一个容器中,并从控制器中操作它的约束。

第一次改变

class CustomerListVC : UITableViewController

class CustomerListVC : UIViewController

接下来丢弃 Interface Builder 中的 Customer List 实例并拖入一个新的 UIViewController 实例。 Xcode 不希望您更改其库存对象的基类。

将新的UIViewController 实例设为CustomerListVC 类型FileOwner 并将UITableView 拖到内容视图中。

设置边缘约束并将出口添加到视图控制器中的约束。

从那里玩你认为合适的桌子。例如

-(void)squishAtBottomLeftAnimated:(BOOL)animate 

    CGFloat animateTime = animate? 0.5:0;

    [UIView animateWithDuration:animateTime animations:^

        self.topEdgeConstraint.constant = 400;

        self.bottomEdgeConstraint.constant = 5;

        self.leadingEdgeConstraint.constant = 5;

        self.trailingEdgeConstraint.constant = 200;

        [self.view layoutIfNeeded];

    ];

【讨论】:

感谢您的回答。我选择了 Nazim 的解决方案,因为它需要的修改较少:)

以上是关于以编程方式更改表的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中以编程方式更改按钮大小?

以编程方式更改条形按钮背景的图像大小?

如何在 Swift 中以编程方式更改 UICollectionViewCell 大小?

以编程方式更改 UIImageView 帧大小

以编程方式更改系统显示大小 Android N

如何以编程方式更改视图大小?