相关疑难解决方法(0)

正确调整基于视图的NSTableView上的行的大小

NSTableView更改表视图大小时,基于视图的具有动态高度的行不会调整其行的大小.当行高从表视图的宽度派生时,这是一个问题(想想填充列并包装因此扩展行大小的文本块).

NSTableView每当它改变大小但我没有成功时,我一直试图调整行的大小:

  • 如果我通过查询仅调整可见行的大小enumerateAvailableRowViewsUsingBlock:,则一些不可见的行不会调整大小,因此当用户滚动并显示这些行时,会显示旧的高度.
  • 如果我调整所有行的大小,当有很多行时会变得非常慢(在我的1.8Ghz i7 MacBook Air中每个窗口调整1000行后大约1秒延迟).

有人可以帮忙吗?

这是我检测表视图大小更改的位置 - 在表视图的委托中:

- (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)

macos cocoa objective-c nstableview appkit

9
推荐指数
1
解决办法
4964
查看次数

如何根据文本内容增加NSTableView中的行高?

如何在文本Content.Row高度增加NSTableView中的行高当文本更多时应增加行高,删除文本时行应缩小.

我在我的NSTableView子类中实现了textDidChange通知,但是我找不到任何会增加行高的方法.setRowHeightNSTableView将增加tableview中每一行的高度.我想要一个变量行高.我可以有任何示例代码或任何指针来完成此任务.


我找到了以下链接

http://cocoadev.com/forums/discussion/1851/calculating-row-heights

但我无法找到任何关于此的例子!任何关于这个的例子对我来说都是一个很大的帮助!


试图实现以下deleagate

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row

通过计算字符串长度,现在我可以增加行高,但NSTextFieldCell 高度相同.当行高度更改时,如何增加文本字段的高度.

macos cocoa objective-c nstableview

7
推荐指数
1
解决办法
4882
查看次数

基于视图的NSTableView,使行高取决于内容

我需要一点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)

cocoa objective-c interface-builder nstableview xcode5

7
推荐指数
1
解决办法
2303
查看次数

NSTableView行高基于NSStrings

基本上,我有一个带有1列的NSTableView,我在每行插入长字符串.但是,并非所有的字符串都很长,所以我希望每行的高度根据字符串的长度而有所不同.

我已经发现我需要询问它的宽度是多少,然后询问字符串如果柱子宽那么会占用多少行,然后决定NSCell的"高"程度.但是我到底该怎么做呢?我得到了以下的柱宽:

[[[tableView tableColumns] objectAtIndex:0] width];

但我无法弄清楚如何询问NSString将占用多少空间.或者,也许,我应该采取更好的方式来做这件事?

在此先感谢您的帮助.

cocoa objective-c nstableview

6
推荐指数
2
解决办法
4666
查看次数

NSTableCellView 动态高度与 NSTextField 多行自动布局

我有一个基于视图的 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)

我已经尝试了以下链接,但没有任何帮助,文本字段的文本仍在剪切。

macos cocoa nstableview autolayout nstablecellview

6
推荐指数
0
解决办法
1745
查看次数

根据文本动态调整NSTextFieldCell的高度

有什么办法可以根据NSTableView中的文本量调整NSTextFieldCell的高度吗?

简而言之,我希望tableView:heightOfRow:根据相应NSTextFieldCell中的文本返回一个值,并在每次文本从预定义的行数增加时继续更新.

我可以在第一次加载表时获得动态高度.但是当文本更新时无法获得改变它的方法.

谢谢.

cocoa nstableview nstextfieldcell

5
推荐指数
1
解决办法
1060
查看次数

如何在列调整大小后使用 usesAutomaticRowHeights = true 更新 NSTableView 的行高?

从 macOS 10.13 开始,我们可以使用具有自动行高的 NSTableView,这要归功于新属性usesAutomaticRowHeights和自动布局。这很好用。

但是当用户调整列大小时,计算出的高度不再正确,并且表格视图单元格中会出现间隙。

在这种情况下,是否有经过验证的方法可以在调整列大小后更新行高?

我已经尝试过类似的方法updateConstraintsForSubtreeIfNeeded()updateConstraints()setNeedsDisplay()reloadData()等等,但没有任何工程。

macos nstableview autolayout

5
推荐指数
1
解决办法
1594
查看次数