gpt4 book ai didi

ios - 配置单元格时更改 View 位置。奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 03:18:26 25 4
gpt4 key购买 nike

我有一个标准的 UINavigationController,其根部有一个 UITableViewController。在 IB 中,我绘制了一个带有标签和 UIView 的原型(prototype)单元格。 UIView 包含一个按钮。我希望 UIView 在标签之后 x 对齐,作为标签中文本长度的函数。

在 IB 中, View 的左侧最初与标签的左侧对齐。 IB 中没有布局限制。

这是我的 cellForRowAtIndexPath ...

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

NSArray *labels = @[@"SOME STRING", @"SHORTER", @"A VERY MUCH LONGER ONE", @"REGULAR ONE", @"TINY"];
UILabel *label = (UILabel *)[cell viewWithTag:32];
label.text = labels[indexPath.row];

UIView *view = [cell viewWithTag:33];
CGSize size = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];
view.frame = CGRectOffset(label.frame, size.width, 0);

return cell;
}

两个问题:我已经设置断点并观察这段代码在 View 第一次出现时运行。我看到每一行的 view.frame 都发生了变化,但 View 并没有改变位置。我留在它的 IB 位置,就在标签的顶部。如果我向下滚动表格,下部单元格(大概是重复使用的)的 View 位于所需位置。如果我向上滚动,上面的行也很好。它只是无法处理上部单元格的初始呈现。

第二个问题是仅包含在第一行中的按钮对其文本应用了微妙、奇怪的效果,如模糊。见附件...

第一行按钮(在 mac 预览中放大...看到字母左边缘的额外模糊了吗?)

enter image description here

其他行按钮

enter image description here

我尝试过的东西:我尝试了一些变体,包括使用添加了 TableView 的常规 View Controller (而不是 UITableViewController)。我发现如果我在 viewDidAppear 上重新加载数据,就可以解决放置问题,但不能解决模糊按钮。 (此外,我不喜欢需要在 viewDidAppear 上重新加载的想法)。在 viewWillAppear 上这样做根本没有效果。我也尝试过让标签缓慢变化的动画。它再次发生,但仅在第二次配置单元时发生。我尝试更改 UIView 颜色以证明代码正在运行。每次都会发生颜色变化,包括第一次,但不会发生 View 放置。我疯了吗?

最佳答案

对于问题1:

在返回单元格之前尝试调用[cell layoutIfNeeded],当它不需要重新布局时应该不会影响性能。

对于问题2:在设置框架之前尝试调用 CGRectIntegral。即

view.frame = CGRectIntegral( CGRectOffset(label.frame, size.width, 0) );

关于ios - 配置单元格时更改 View 位置。奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21411437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com