以编程方式更改表的大小

时间:2014-07-17 14:30:04

标签: ios uitableview tableview programmatically-created

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

嘿伙计们, 我有一个应用程序递归触发一个相同的tableview控制器(假设其中有文件和文件夹),直到你触发文件而不是文件夹。单击文件时,它会跳转到GLKit View Controller。

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

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

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

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

它的工作原理如果我以编程方式创建mainTableView,但我的segue被删除了,我没有找到任何以编程方式创建segue的解决方案。

如果你能帮我找到一个与故事板tableView一起使用的解决方案,那就太棒了。

2 个答案:

答案 0 :(得分:0)

步骤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
}

答案 1 :(得分:0)

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

您可以做的是将UITableView放在容器中并从控制器处理其约束。

首先改变

class CustomerListVC : UITableViewController

class CustomerListVC : UIViewController

接下来抛弃Interface Builder中的Customer List实例,然后拖入一个新的UIViewController实例。 Xcode不喜欢你改变它的库存对象的基类。

将新UIViewController个实例设为CustomerListVC类型FileOwner,然后将UITableView拖到内容视图中。

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

enter image description here

从那里玩你认为合适的桌子。 e.g

-(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];

    }];
}