在NSTableView
更改表视图大小时,基于视图的具有动态高度的行不会调整其行的大小.当行高从表视图的宽度派生时,这是一个问题(想想填充列并包装因此扩展行大小的文本块).
NSTableView
每当它改变大小但我没有成功时,我一直试图调整行的大小:
enumerateAvailableRowViewsUsingBlock:
,则一些不可见的行不会调整大小,因此当用户滚动并显示这些行时,会显示旧的高度.有人可以帮忙吗?
这是我检测表视图大小更改的位置 - 在表视图的委托中:
- (void)tableViewColumnDidResize:(NSNotification *)aNotification
{
NSTableView* aTableView = aNotification.object;
if (aTableView == self.messagesView) {
// coalesce all column resize notifications into one -- calls messagesViewDidResize: below
NSNotification* repostNotification = [NSNotification notificationWithName:BSMessageViewDidResizeNotification object:self];
[[NSNotificationQueue defaultQueue] enqueueNotification:repostNotification postingStyle:NSPostWhenIdle];
}
}
Run Code Online (Sandbox Code Playgroud)
以下是上面发布的通知的处理程序,其中可见行的大小调整:
-(void)messagesViewDidResize:(NSNotification *)notification
{
NSTableView* messagesView = self.messagesView;
NSMutableIndexSet* visibleIndexes = [NSMutableIndexSet new];
[messagesView enumerateAvailableRowViewsUsingBlock:^(NSTableRowView *rowView, NSInteger row) {
if (row >= 0) {
[visibleIndexes addIndex:row];
} …
Run Code Online (Sandbox Code Playgroud) 如何在文本Content.Row高度增加NSTableView中的行高当文本更多时应增加行高,删除文本时行应缩小.
我在我的NSTableView子类中实现了textDidChange通知,但是我找不到任何会增加行高的方法.setRowHeight
NSTableView将增加tableview中每一行的高度.我想要一个变量行高.我可以有任何示例代码或任何指针来完成此任务.
我找到了以下链接
http://cocoadev.com/forums/discussion/1851/calculating-row-heights
但我无法找到任何关于此的例子!任何关于这个的例子对我来说都是一个很大的帮助!
试图实现以下deleagate
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
通过计算字符串长度,现在我可以增加行高,但NSTextFieldCell 高度相同.当行高度更改时,如何增加文本字段的高度.
我需要一点NSTableView和动态行高的帮助
是)我有的:
基于单列视图的NSTableVIew绑定到数组控制器.每个NSTableCellView包含三个子视图:NSImageView,NSTextField(单行)和NSTextField(多行).基本上,这是一个聊天界面,所以你会有一个消息,发件人和头像的列表.
我想要实现的目标:
当文本长于行的最小高度时,行会展开以适合内容.就像iMessage一样,气泡扩展到适合消息.
......这似乎是一件非常自然的事情,但是我在网上找到的所有相关解决方案(参考文献1,参考文献2),其中没有一个对我有用.
Ref 2看起来很奇妙,但这些都不适用于我的应用程序,因为示例项目使用第三方自动布局代码,整个内容是为iOS设计的.参考文献1提供了一个非常有前途的解决方案,用英语写成.我尝试使用解决方案中描述的"虚拟视图"进行设置,但未能正确地更改和测量高度.
这是我的代码tableView:heightOfRow:
,_samplingView
是虚拟视图,它具有工作约束并且与中的相同tableView
.
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
NSTextField *textField;
NSTextFieldCell *messageCell;
for (NSView *subview in [_samplingView subviews]) {
if ([[subview identifier] isEqualToString:@"message"]) {
textField = (NSTextField*)subview;
messageCell = ((NSTextField*)subview).cell;
}
}
Message *message = [[_messagesArrayController arrangedObjects] objectAtIndex:row];
_samplingView.objectValue = message;
CGFloat width = [[[tableView tableColumns] objectAtIndex:1] width];
[_samplingView setBounds:NSMakeRect(0, 0, width, CGFLOAT_MAX)];
[_samplingView display];
CGFloat optimalHeight = 10 + [messageCell cellSize].height; //messageCell's size …
Run Code Online (Sandbox Code Playgroud) 基本上,我有一个带有1列的NSTableView,我在每行插入长字符串.但是,并非所有的字符串都很长,所以我希望每行的高度根据字符串的长度而有所不同.
我已经发现我需要询问它的宽度是多少,然后询问字符串如果柱子宽那么会占用多少行,然后决定NSCell的"高"程度.但是我到底该怎么做呢?我得到了以下的柱宽:
[[[tableView tableColumns] objectAtIndex:0] width];
但我无法弄清楚如何询问NSString将占用多少空间.或者,也许,我应该采取更好的方式来做这件事?
在此先感谢您的帮助.
我有一个基于视图的 NSTableView 和 NSTableCellView 子类,它们具有启用自动换行的多行 NSTextField。现在我希望我的表格根据文本字段内容具有动态行高。自动布局也已启用。
文本字段的约束如图所示:
Tableview heightForRow 方法代码:
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row {
VerseTableCell *cell = [self getTableCellForRow:row];
[cell.txtSuraDetail invalidateIntrinsicContentSize];
[cell invalidateIntrinsicContentSize];
[cell setTranslatesAutoresizingMaskIntoConstraints:YES];
[cell layout];
[cell setNeedsDisplay:YES];
[cell setNeedsUpdateConstraints:YES];
[cell setNeedsLayout:YES];
[cell layoutSubtreeIfNeeded];
NSRect size = cell.txtSuraDetail.frame;
CGFloat height = (size.size.height) + 30;
return height;
}
Run Code Online (Sandbox Code Playgroud)
单元格布局方法:
- (void)layout {
[super layout];
self.txtSuraDetail.preferredMaxLayoutWidth = self.txtSuraDetail.frame.size.width;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下链接,但没有任何帮助,文本字段的文本仍在剪切。
有什么办法可以根据NSTableView中的文本量调整NSTextFieldCell的高度吗?
简而言之,我希望tableView:heightOfRow:根据相应NSTextFieldCell中的文本返回一个值,并在每次文本从预定义的行数增加时继续更新.
我可以在第一次加载表时获得动态高度.但是当文本更新时无法获得改变它的方法.
谢谢.
从 macOS 10.13 开始,我们可以使用具有自动行高的 NSTableView,这要归功于新属性usesAutomaticRowHeights
和自动布局。这很好用。
但是当用户调整列大小时,计算出的高度不再正确,并且表格视图单元格中会出现间隙。
在这种情况下,是否有经过验证的方法可以在调整列大小后更新行高?
我已经尝试过类似的方法updateConstraintsForSubtreeIfNeeded()
,updateConstraints()
,setNeedsDisplay()
,reloadData()
等等,但没有任何工程。