我想在左侧和右侧添加2个imageViews,在TableView上的中心添加一个单元格textLabel。
2个imageViews具有不同的角色和动作。 (能够触摸,隐藏而不是隐藏)
现在左侧的imageView位于中心textLabel的顶部。 所以我想将textLabel的宽度和x位置更改为不在imageViews的顶部。
我试过这段代码,但它没有用。
CGRect frame = CGRectMake(40, 0, 200, 40);
cell.textLabel.frame = frame;
我还尝试在tableView上添加UILabel。 但是我将实现TableViewCell动画,如果我添加UILabel,它就不起作用了。 所以我不会这样使用。
我该如何解决?
这是代码。
- (void)viewDidLoad {
tableView = [[UITableView alloc]initWithFrame:rect style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview: self.tableView];
self.tableView.backgroundColor = [UIColor clearColor];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
[self updateCell:cell atIndexPath:indexPath];
return cell;
}
- (void)updateCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
NSMutableArray *set = [self.section objectAtIndex:indexPath.row];
cell.backgroundColor = [UIColor blueColor];
cell.textLabel.textColor = [UIColor blackColor];
cell.textLabel.font = [UIFont fontWithName:@"HiraKakuProN-W3" size:15];
cell.textLabel.adjustsFontSizeToFitWidth = YES;
cell.textLabel.minimumScaleFactor = 10.0f;
cell.textLabel.numberOfLines = 0;
}
答案 0 :(得分:2)
您需要覆盖UItableviewCell类的layoutSubviews
- (void)layoutSubviews {
[super layoutSubviews];
CGSize size = self.bounds.size;
self.textLabel.frame = CGRectMake(2.0f, 4.0f, size.width, size.height); // or customize
self.textLabel.contentMode = UIViewContentModeScaleAspectFit;
}
<强>选择-2 强>
将UILabel和子视图设置为cell.contentView
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(4, 4, 200, 30)];
label.text = @"Test";
[cell.contentView addSubview:label];
<强>更新强>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
[self updateCell:cell atIndexPath:indexPath];
if (cell == nil){
myCellView = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"Cell"];
UILabel *orderLbl = [[UILabel alloc] initWithFrame:CGRectMake(1, 13, 176, 21)];
[orderLbl setTag:1];
orderLbl.textColor = [UIColor whiteColor];
[orderLbl setBackgroundColor:[UIColor clearColor]];
[orderLbl setTextAlignment:NSTextAlignmentCenter];
[cell.contentView addSubview:orderLbl];
}
[(UILabel *)[cell.contentView viewWithTag:1] setText:[NSString stringWithFormat:@"test"]];
return cell;
}
答案 1 :(得分:0)
更好的是,您可以将自定义文本标签与您所需的帧要求一起使用。
为textlabel添加标签,并在cellForRowAtIndexPath中找到标签,如下所示:
UILabel *myLabel = (UILabel *)[cell.contentView viewWithTag:givenTagValue];
然后根据需要对此标签应用所需的行为。
希望有所帮助......
答案 2 :(得分:0)
在这种情况下,我更喜欢创建自定义子类并应用我想要的布局,所以如果我收到任何自动布局警告我总是知道它是因为布局不正确。
答案 3 :(得分:0)
实际上,在TableView中不允许更改框架中单元格中的textLabel。每个单元格的文本标签的框架宽度与单元格有关,开发人员无法以编程方式对其进行设置。但是,我找到了一个可行的解决方案:我们可能不会更改textLabel的框架,但我们可能会改变源文本。如果我们可以提前截断源字符串,就可以解决这个问题。
//在表视图中将数组中的每个元素分配一行
func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) - &gt; UITableViewCell {
var myCell = myTableView.dequeueReusableCell(withIdentifier: "The Cell")
if myCell == nil {
myCell = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: "The Cell")
}
myCell?.accessoryType = UITableViewCellAccessoryType.none
// If the text is too long (longer than 25 chars), the text will be truncated
// The lenght of label cannot be set effectively here, so I truncate the source string alternatively
var myString: String = sectionArray[indexPath.row]
if myString.characters.count > 25 {
let myIndex = myString.index(myString.startIndex, offsetBy: 25)
myString = myString.substring(to: myIndex)
myString += "..."
}
myCell?.textLabel?.text = myString
myCell?.detailTextLabel?.text = "\(NSDate())"
return myCell!
}
支持工作。