以编程方式设置UITableViewController的显式大小

时间:2012-05-10 16:13:40

标签: objective-c ios xcode frame

我希望能够根据内容设置我的tableview的大小。我认为我可以在prepareForSegue中执行此操作,因为如果在我的rootViewController中按下按钮,我的tableview将显示为弹出窗口。所以我正在尝试的是设置显式大小,就像我在故事板中可以做的那样,但我想以编程方式进行。我试过了self.tableview.frame.size,但它得到一个错误,它说它不可分配?

if([[segue identifier] isEqualToString:@"tagView1"])
{
    TagTableViewController *tvc = [segue destinationViewController];
    tvc.tableView.frame = CGRectMake(tvc.tableView.frame.origin.x, tvc.tableView.frame.origin.y , 100, 100);
}

4 个答案:

答案 0 :(得分:2)

在TVC的viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];

    self.clearsSelectionOnViewWillAppear = NO;
    // Change to what you need
    self.contentSizeForViewInPopover = CGSizeMake(150.0, 250.0);
}

答案 1 :(得分:0)

您必须设置整个frame。如果您希望origin保持不变,请执行以下操作:

self.tableview.frame = CGRectMake(self.tableview.frame.origin.x, self.tableview.frame.origin.y, __width__, __height__);

答案 2 :(得分:0)

尝试在vieDidAppear中设置表的大小:  在TVC。

像:

- (void)viewDidAppear:(BOOL)动画{

[super viewDidAppear:animated];

[self.tableView setFrame:CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.frame.size.height - 50)];

}

答案 3 :(得分:-1)

尝试self.tableview.frame = (CGRect){self.tableview.frame.origin, newSize};

self.tableview.frame = CGRectMake(self.tableview.frame.origin.x, self.tableview.frame.origin.y, newSize.width, newSize.height);相同,只是更短。

您不应该直接设置大小,因为在这种情况下不会通知观察视图框架的其他对象。