因此,我以编程方式在frame
中设置UITableView
和UIViewController
的设置,然后使用自定义UITableViewCell
将数据填充到其中。问题是自定义单元格始终的宽度为frame
且contentView
320 , 44 {{1即使我用height
设置它。
我的代码:
创建表:
initWithFrame
cellRowForIndexpath方法:
UITableView *pickPlayerNameTable =
[[UITableView alloc] initWithFrame:CGRectMake(10,
15,
(viewSize.width - 20),
4 * (viewSize.height/5) - 15)];
pickPlayerNameTable.backgroundColor = [UIColor clearColor];
pickPlayerNameTable.separatorStyle = UITableViewCellSeparatorStyleNone;
// playerNameTable.
[self.view addSubview:pickPlayerNameTable];
[self.view bringSubviewToFront:pickPlayerNameTable];
//set the controller as the tables delegate and data source
pickPlayerNameTable.delegate = self;
pickPlayerNameTable.dataSource = self;
最后一个自定义单元格- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdentifier = @"playerNameSellectionCell";
PlayerNameCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell==nil)
{
cell = [[PlayerNameCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
//set the label to the corresponding player
cell.playerNumberLabel.text = [NSString stringWithFormat:@"Παίκτης %ld:", (indexPath.row + 1)];
return cell;
}
方法:
initWithStlye
当前最终结果的图像:
正如您所看到的那样,文本字段不是从中间部分开始,也不是从宽度的一半开始,这是因为它总是具有320的宽度,即使tableview小于那个(运行时的情况) iphone 5)或更大(iphone 6)。
请帮忙吗?谢谢。
答案 0 :(得分:1)
您可以使用委托方法设置高度:
// For swift:
func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
// For Objective-C
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
答案 1 :(得分:1)
我认为Antoine的回答是正确的,但是如果您关于 CustomCell的子视图的问题需要布局子视图。根据{{3}}
layoutSubviews - 如果您需要对子视图的布局进行更精确的控制,而不是约束或自动调整行为提供,请实现此方法。
因此您需要在 UITableViewCell
中实施- (void)layoutSubviews
方法
您还应该实施
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
如果不这样做,则单元格高度始终为默认值。