标签: nstextview

如何以固定宽度获取NSAttributedString的高度

我想在固定宽度的框中绘制一些NSAttributedStrings,但是在计算绘制它们时会占用的正确高度时遇到问题.到目前为止,我已经尝试过:

  1. 调用- (NSSize) size,但结果是无用的(为此目的),因为他们会给出字符串所需的宽度.

  2. - (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options使用矩形调用我想要的宽度和NSStringDrawingUsesLineFragmentOrigin选项,就像我在绘图中使用的那样.结果......难以理解; 当然不是我想要的.(正如许多地方所指出的,包括这个 Cocoa-Dev线程).

  3. 创建一个临时的NSTextView并执行: 当我查询tmpView的框架时,宽度仍然是所需的,并且高度通常是正确的......直到我得到更长的字符串,当它通常是所需尺寸的一半时.(似乎没有最大尺寸被击中:一帧将是273.0高(约300太短),另一帧将是478.0(只有60-ish太短)).
    [[tmpView textStorage] setAttributedString:aString];
    [tmpView setHorizontallyResizable:NO];
    [tmpView sizeToFit];

如果有人管理过这个,我会感激任何指点.

cocoa nstextview nsattributedstring appkit

48
推荐指数
4
解决办法
3万
查看次数

NSTextField还是NSTextView?

有人可以向我解释NSTextField和NSTextView之间的主要区别是什么?我知道NSTextView有更多的功能,通常用于更长的文本,NSTextField通常用于单行纯文本字段,但如果我理解正确,NSTextField也可以用于属性字符串和多行......

我特别需要的是一个控件,它可以在Tweetie或任何其他类似软件中的时间线视图中显示消息文本.我唯一的要求是:

  • 它应该显示约1-4行的文本
  • 它应该能够显示文本中的链接(据我所知,这在两个控件中应该很简单 - http://developer.apple.com/mac/library/qa/qa2006/qa1487.html)
  • 它应该让用户选择并复制文本
  • 它不应该让用户滚动文本,编辑文本或显示通常出现在可编辑文本字段中的上下文菜单,它甚至不应该在此字段中显示文本光标

有了这样的要求,我使用NSTextField或NSTextView会更好吗?NSTextField是否足够好,或者NSTextView是否具有NSTextField不重要的东西?

macos cocoa text nstextfield nstextview

29
推荐指数
1
解决办法
1万
查看次数

'sizeWithFont:constrainedToSize:lineBreakMode:'已弃用:

在Xcode 5上将项目从iOS5.0转换为iOS7/iOS6.下面的代码给出了编译时警告:

'sizeWithFont:constrainedToSize:lineBreakMode:'不推荐使用:首先在ios 7.0中弃用 - 使用 - boundingRectWithSize:options:attribiutes:context

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0)
    {
        self.lblHidden.frame = CGRectMake(58, 228, 945, 9999);
        self.lblHidden.text = detailShareObj.pDesc;
        CGSize size = [detailShareObj.pDesc sizeWithFont:self.lblHidden.font constrainedToSize:self.lblHidden.frame.size lineBreakMode:NSLineBreakByWordWrapping];
        return 228.0+size.height+20;

    }
    else if (indexPath.section == 1)
    {
        NSString *tempPointStr = (self.shortDescArray)[indexPath.row];

        self.lblHidden.frame = CGRectMake(58, 0, 945, 9999);
        self.lblHidden.text = tempPointStr;
        CGSize size = [tempPointStr sizeWithFont:self.lblHidden.font
                               constrainedToSize:self.lblHidden.frame.size
                                   lineBreakMode:NSLineBreakByWordWrapping];

            return 50.0f;
    }
Run Code Online (Sandbox Code Playgroud)

我尝试了其他地方给出的一些建议,但是如果有人可以通过提供代码中所需的更正来提供帮助,那么没有什么可以解决的.

xcode nstextview uikit ios

29
推荐指数
3
解决办法
3万
查看次数

行间距如何在Core Text中工作?(为什么它与NSLayoutManager不同?)

我正在尝试使用Core Text函数绘制文本,其行间距尽可能接近使用NSTextView时的行间距.

以此字体为例:

NSFont *font = [NSFont fontWithName:@"Times New Roman" size:96.0];
Run Code Online (Sandbox Code Playgroud)

如果我在NSTextView中使用它,这个字体的行高是111.0.

NSLayoutManager *lm = [[NSLayoutManager alloc] init];
NSLog(@"%f", [lm defaultLineHeightForFont:font]); // this is 111.0
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用Core Text做同样的事情,结果是110.4(假设您可以通过添加上升,下降和前导来计算线高).

CTFontRef cFont = CTFontCreateWithName(CFSTR("Times New Roman"), 96.0, NULL);
NSLog(@"%f", CTFontGetDescent(cFont) + CTFontGetAscent(cFont) + 
             CTFontGetLeading(cFont)); // this is 110.390625
Run Code Online (Sandbox Code Playgroud)

这非常接近111.0,但对于某些字体,差异要大得多.例如,对于Helvetica,NSLayoutManager给出115.0而CTFont上升+下降+领先= 96.0.很明显,对于Helvetica,我无法使用上升+下降+导致计算线之间的间距.

所以我想我会使用CTFrame和CTFramesetter来布局几行并从中获取行间距.但这也给出了不同的价值观.

CTFontRef cFont = CTFontCreateWithName(CFSTR("Times New Roman"), 96.0, NULL);
NSDictionary *attrs = [NSDictionary dictionaryWithObject:(id)cFont forKey:(id)kCTFontAttributeName];
NSAttributedString *threeLines = [[NSAttributedString alloc] initWithString:@"abcdefg\nabcdefg\nabcdefg" attributes:attrs];

CTFramesetterRef threeLineFramesetter =  CTFramesetterCreateWithAttributedString((CFAttributedStringRef)threeLines);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, CGRectMake(0.0, …
Run Code Online (Sandbox Code Playgroud)

macos objective-c nslayoutmanager nstextview core-text

26
推荐指数
1
解决办法
1万
查看次数

使用Autolayout扩展NSTextViews

我的应用程序包含一个NSScrollView文档视图,其中包含一些垂直堆叠的文件NSTextViews- 每个文本视图在添加文本时都会在垂直方向上调整大小.

目前,这都是在代码中管理的.该NSTextViews自动调整,但我观察他们调整大小有NSViewFrameDidChangeNotification,重计算其所有来源,使他们不重叠,并调整其上海华盈(滚动视图的文档视图),使它们都适合和可滚动到.

这似乎是自动布局的完美候选人!我NSLayoutConstraints在第一个文本视图和它的容器,最后一个文本视图及其容器之间设置,以及彼此之间的每个文本视图.然后,如果任何文本视图增长,它会自动"按下"它下面的文本视图的来源以满足约束,最终增加文档视图的大小,每个人都很高兴!

除此之外,似乎没有办法NSTextView在基于约束的布局中添加文本时自动增长?使用与NSTextView之前输入的文本自动扩展完全相同的内容,如果我没有为其高度指定约束,则将其自动解析为0并且不显示.如果我确实指定了约束,即使是不等式(例如> = 20),它仍然会停留在该大小,并且不会随着文本的添加而增长.

我怀疑这与NSTextView的实现有关-intrinsicContentSize,默认情况下会返回(NSViewNoInstrinsicMetric, NSViewNoInstrinsicMetric).

所以我的问题是:如果我根据我的文本布局NSTextView返回更有意义intrinsicContentSize的子类,那么我的自动布局会按预期工作吗?

关于实现intrinsicContentSize垂直调整大小NSTextView的任何指针?

cocoa nstextview osx-lion autolayout

23
推荐指数
4
解决办法
8483
查看次数

附加到NSTextView并滚动

好的,我需要的应该是非常简单的.然而,我到处寻找,我不确定我发现了100%有效的东西(这也是过去困扰我的东西).

所以,我们在这里:

  • 我希望能够追加NSTextView
  • 附加后,NSTextView应向下滚动(以便最新的附加内容可见)

相当直截了当,是吧?

所以...任何想法?(完全执行这个简单"技巧"的代码示例将非常理想......)

macos cocoa objective-c nstextview

23
推荐指数
3
解决办法
1万
查看次数

ARC项目中的NSTextView的IBOutlet

当你读到这里在大多数情况下,IBOutlet应该是弱.

现在,您可以在开发库中阅读并非所有类都支持弱引用.(例如NSTextView).这意味着您必须使用assign:

@property (assign) IBOutlet NSTextView *textView;
Run Code Online (Sandbox Code Playgroud)

如果使用弱引用,您将收到以下错误:"不允许合成弱不可用属性,因为它需要合成__weak对象的ivar"

文档错过的内容是现在你必须在使用后再将属性设置为nil,例如通过一种dealloc方法:

- (void)dealloc
{
    self.textView = nil;
} 
Run Code Online (Sandbox Code Playgroud)

据我所知,标NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE有的类不支持弱引用,但原因是什么?

weak nstextview iboutlet automatic-ref-counting

21
推荐指数
1
解决办法
1755
查看次数

以编程方式更改NSTextView的文本

我找不到任何与a中显示的文本值相关的参数NSTextView.我知道a NSTextView使用复杂的结构(有NSLayoutManager...等),但我找不到修改当前text值的有效方法.

macos cocoa objective-c nstextview

20
推荐指数
5
解决办法
2万
查看次数

如何根据内容调整NSTextView的大小?

我试图在NSTextView中设置一个属性字符串.我想根据其内容增加其高度,最初将其设置为某个默认值.

所以我试过这个方法:

我在NSTextView中设置内容.当我们在NSTextView中设置一些内容时,它的大小会自动增加.所以我将其超级视图的高度NSScrollView增加到它的高度,但是NSScrollView没有完全调整大小,它在右边显示了滚动条.

float xCoordinate = 15.0;

[xContentViewScroller setFrame:NSMakeRect(xCoordinate, 0.0, 560.0, 10.0)];

[[xContentView textStorage] setAttributedString:xContents];

float xContentViewScrollerHeight = [xfContentView frame].size.height + 2;

[xContentViewScroller setFrame:NSMakeRect(xCoordinate, 0.0, 560.0, xContentViewScrollerHeight)]; 
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我一些方法或方法来解决这个问题.通过谷歌搜索,我发现在UITextView中有contentSize方法可以获得其内容的大小,我试图在NSTextView中找到类似的方法,但无法取得任何成功:(

cocoa nstextview

19
推荐指数
3
解决办法
7455
查看次数

如何在NSTextView中查找文本?

我需要找到一个文本NSTextView,并将其保存到文件中.我可以保存罚款.我已经习惯了-stringValue,-textStorage到目前为止,但都没有用过.当我输入-stringValue时,它只是给了我(null),当我输入-textStorage时,它给了我很大一部分(就像一段长长的隐形文本).

如何将文本从一个文本中NSTextView删除NSString

cocoa objective-c nsstring nstextview

19
推荐指数
1
解决办法
1万
查看次数