- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
默认情况下,UITableViewCell 实例将标签对 textLabel/detailTextLabel 定位在其父 View 的中心。我更喜欢将这对对齐到单元格的顶部。我如何以编程方式执行此操作?
谢谢,
道格
最佳答案
文档将 -[UIView layoutSubviews] 描述为
"Overridden by subclasses to layout subviews when layoutIfNeeded is invoked. The default implementation of this method does nothing."
该描述并不详尽,但准确无误。在这种情况下,该方法的行为是布局您的 subview 。只要设备方向发生变化,它就会被调用。每当您调用 -setNeedsLayout 时,它也会安排在以后调用。
由于 UIView 的实现什么都不做(我认为 UIControl 也是如此),您可以获得完全的创作自由,可以将 UIView 子类 subview 放置在您想要的任何位置。
在子类化 UITableViewCell 时,您有几个选项可以尝试:
在 related SO question 中,建议避免 #1,操作内置的 textLabel 和 detailTextLabel。
一个更可靠的选择是做这样的事情:
@interface MyTableViewCell : UITableViewCell {
UILabel *myTextLabel;
UILabel *myDetailTextLabel;
}
// ... property declarations
@end
@implementation MyTableViewCell
@synthesize myTextLabel, myDetailTextLabel;
- (id) initWithFrame: (CGRect)frame {
self = [super initWithFrame: frame];
if (self) {
myTextLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
[self.contentView addSubview: myTextLabel];
myDetailTextLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
[self.contentView addSubview: myDetailTextLabel];
}
return self;
}
- (void) dealloc {
[myTextLabel release];
[myDetailTextLabel release];
[super dealloc];
}
- (void) layoutSubviews {
// Let the super class UITableViewCell do whatever layout it wants.
// Just don't use the built-in textLabel or detailTextLabel properties
[super layoutSubviews];
// Now do the layout of your custom views
// Let the labels size themselves to accommodate their text
[myTextLabel sizeToFit];
[myDetailTextLabel sizeToFit];
// Position the labels at the top of the table cell
CGRect newFrame = myTextLabel.frame;
newFrame.origin.x = CGRectGetMinX (self.contentView.bounds);
newFrame.origin.y = CGRectGetMinY (self.contentView.bounds);
[myTextLabel setFrame: newFrame];
// Put the detail text label immediately to the right
// w/10 pixel gap between them
newFrame = myDetailTextLabel.frame;
newFrame.origin.x = CGRectGetMaxX (myTextLabel.frame) + 10.;
newFrame.origin.y = CGRectGetMinY (self.contentView.bounds);
[myDetailTextLabel setFrame: newFrame];
}
@end
在 MyTableViewCell 中,您将忽略内置文本标签并使用您自己的自定义 UILabel。您可以完全控制它们在表格 View 单元格的内容矩形中的定位。
我遗漏了很多东西。在使用文本标签进行自定义布局时,您需要考虑:
找出您自己的布局算法。
我使用上面的布局算法调整自定义 UILabel 的大小以适合其文本内容,然后将它们并排放置。您可能需要更适合您的应用的内容。
将自定义标签保留在内容 View 中。
在 -layoutSubviews 中,您可能需要逻辑来保持自定义 UILabel 的大小和位置,以便它们不会落在内容矩形的边界之外。根据我幼稚的布局逻辑,放入 UILabel(或两者)中的任何长文本都可能导致标签定位在内容 View 边界之外。
如何处理 -viewDidLoad/-viewDidUnload。
如上编码,该子类不处理从 nib 加载的问题。您可能想使用 IB 来布局您的单元格,如果这样做,您需要考虑 -viewDidLoad/-viewDidUnload/-initWithCoder:
关于iphone - UITableViewCell。如何以编程方式将 textLabel 对齐到顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352465/
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPa
当您使用 UITableViewCell 的内置样式(副标题、右侧细节等)时,您可以使用 textLabel 和 轻松访问文本标签>detailTextLabel 是 UITableViewCell
我是 iPhone 开发新手,目前正在开发一个简单的 RSS 阅读器应用程序。我遇到的问题是我需要重新定位 UITableViewCells 内的 textLabel 。我尝试过 setFrame 或
我希望在按下按钮时让文本标签淡入淡出。我注意到 textlabel 没有不透明度参数。还有其他方法可以达到预期的结果吗? 最佳答案 Winform 不支持Control 不透明度。 在 .Net Fr
好吧,我是一个初学者,我创建了一个带有自定义单元格类的 UITableView,该单元格类按其应有的方式加载,并在每个文本标签中显示 2 个文本标签(cellPrice 和 cellTitle)行/单
我有这个代码: cell.textLabel.text = [arrBugs objectAtIndex:indexPath.row]; cell.detailTextLabel.text = @"j
有一个 UITableViewCell“postCell”,它是一个 IBOutlet,并附加到我放置在 .xib 中的单元格。设置文本标签: - (void)viewDidAppear:(BOOL)
我是 IOS 开发的新手,现在我在 cell.textLabel.textColor 中遇到问题 我所做的是实现一个 TableView ,并根据部分设置颜色,如下所示,我有 4 个部分,每个部分有
我有一个一年前的项目成功了。 我已经编码了: cell.textLabel.numberOfLines = 0; // Multiline 在 UITableView 单元格中启用多行文本,之前它在
我在 swift 中使用部分以编程方式创建了一个 TableView。部分和行的数量将始终相同,因为它们只是显示我从 Firebase 提取的信息。 我想更改其中一个单元格的 textLabel 以对
我正在使用 Swiftforms,发现 here , 添加一个表单供用户填写。由于我已经掌握了大部分信息,因此我正在为用户填写表格,然后如果他们选择并单击提交,他们就可以对其进行编辑。当我预填文本时,
我有自定义 UITableViewCell,但无法在 cellForRow: atIndexPath: 中设置缩进。 cell.indentationWidth = 10.0 cell.indenta
我正在尝试将单元格的 textLabel 文本显示在跨越整个单元格的图像之上。我创建了一个自定义单元格子类,只是为了使图像宽度等于整个单元格大小,如下所示: - (void) layoutSubvi
我希望有一个带有一些标签的表格,然后我在标签后添加一个文本字段 UI。我希望标签的大小固定(例如 150),单元格宽度的其余部分由文本字段占据。 因此我在函数中设置了 cell.textLabel 的
我正在努力使我的 UITableViewCell 的文本标签中的文本从单元格的右侧环绕大约 30 个像素。然而,它从右边开始大约 5 或 10 个像素。我已经尝试编辑我在 cellForRowAtIn
有没有办法让 UIButton 在其 textLabel 中有两种不同的字体大小?原生? 我不想在顶部放置 UILabel。 最佳答案 您可以在界面生成器中执行此操作。此 GIF 将向您展示如何增加文
我有一个 UITableView,作为 cellForRowAtIndexPath 方法,我正在更改单元格的一些属性(字体、大小等)。现在,除了更改 textLabel 的颜色外,下面列出的所有分配都
我几乎尝试了所有方法,但似乎无法将 cell.textLabel 属性向下移动一点点。我在下面附上了一张截图,我已经尝试了几乎所有我能找到的东西。 我尝试直接更改 .frame 属性,尝试通过使用“-
我已经使用代码创建了一个 UITableView 和一个 UITableViewCell 的子类,在我选择单元格之前它显示得非常好。 单元格的textLabel有时会右移或不移 选择前问题的图像表示
我有一个可排序的 UITableView,但仅此而已。现在,我将所有单元格设置为 UITableViewCellEditingStyleNone,但这仍然将单元格的 TextLabel 向右移动 40
我是一名优秀的程序员,十分优秀!