使用Interface builder&iOS7 UIFontTextStyleHeadline时,我将标题标签设置为UIFontTextStyleHeadline
(我想也可以使用以下代码完成:)
myHeadlineTextLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
Run Code Online (Sandbox Code Playgroud)
问: 这很好用,但我希望只使用HelveticaNeue-Thin具有相同的功能
仅作为一个例子:
titleCustomLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:(**Dynamic font size as the user defined in his setting**)];
Run Code Online (Sandbox Code Playgroud)
这样做会有什么优雅的方式?
如何制作一个 NSLayoutManager 将其文本中的每个段落分配给不同的 NSTextContainer?
这类似于 TextKit 中常见的多页/多列用法,但每个页面对应不同长度的不同段落。
我有一个UITextView,我正在尝试显示一些HTML格式的属性文本.它使用内联粗体和斜体等内容.客户端现在希望更改此字体.但是,每当我更改字体时,它似乎忽略任何HTML格式.是否有任何方法可以在保留其他格式属性的同时更改字体,例如粗体化斜体?
我收到日志消息UITextView 正在切换到 TextKit 1 兼容模式,因为它的 textStorage 包含与NSAttributedString使用的TextKit 2 不兼容的属性。documentType: NSAttributedString.DocumentType.html
例子:
func makeUIView(context: Context) -> UITextView {
let textView = UITextView()
return textView
}
func updateUIView(_ uiView: UITextView, context _: Context) {
var currentText: NSAttributedString?
let htmlString = "<html><body><h1>Example</h1></body></html>"
guard let encodedData = htmlString.data(using: .utf8) else {
fatalError("Could not encode HTML data")
}
do {
currentText = try NSAttributedString(data: encodedData,
options: [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
],
documentAttributes: nil)
} catch let error as NSError {
fatalError(error.localizedDescription)
} …Run Code Online (Sandbox Code Playgroud) 我有一个UITextView(在编辑模式下),只有很少的图像(作为NSTextAttachment).我想拦截这些触摸事件.
我在UITextView上设置了一个委托但textView:shouldInteractWithTextAttachment:inRange:从未调用过.
(从论坛看来,UITextView的editable属性应该是NO为了这个工作,但不是根据官方文档)
编辑器看起来像这样:
我在自定义 NSTextStorage 子类中遇到表情符号问题。该类不存储传递给它的任何属性。相反,它生成自己的:
override func attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject] {
if range != nil {
range.memory = NSMakeRange(0, self.string.length)
}
let attributes = [
NSFontAttributeName: NSFont.systemFontOfSize(14)
]
return attributes
}
override func setAttributes(attrs: [String : AnyObject]?, range: NSRange) {
// does nothing
}
Run Code Online (Sandbox Code Playgroud)
这主要工作正常。但是,如果字符串中有任何表情符号,它们就不会出现。在检查 NSTextView 对文本存储的调用时,文本视图似乎试图在任何表情符号范围出现时将其字体属性设置为 AppleColorEmoji 字体。如果您依赖文本视图作为“属性真相”的来源,那很好,但我不希望我的程序像那样工作。就我而言,文本存储需要是任何属性的唯一供应商。它无法侦听文本视图发送的任何内容,属性方面。
我是否必须手动检测字符串中的任何表情符号并手动设置 AppleColorEmoji 字体?或者,还有更好的方法?我已经尝试过使用后备字体并自动搜索包含缺失字符的字体,但是使用这些方法似乎没有涵盖表情符号。
是否有任何帮助,使选定的文本视图字符串Bold,Italic,Underline像iOS的原生"Notes"应用程序.请给我一些有用的链接.我厌倦了整整一天的搜索.非常感谢.
我附加了我的代码,使属性字符串Bold和Italic都像iPhone"Notes"的原生应用程序.
attributedString.beginEditing()
attributedString.addAttributes([NSFontAttributeName: UIFont.boldSystemFont(ofSize: CGFloat(app_delegate.settings.chatFontSize))], range: range)
attributedString.addAttributes([NSFontAttributeName: UIFont.italicSystemFont(ofSize: CGFloat(app_delegate.settings.chatFontSize))], range: range)
attributedString.endEditing()
Run Code Online (Sandbox Code Playgroud)
但它只给出斜体字符串,而不是粗体字.我需要Italic和Bold.谢谢.
我在a中有以下HTML,UITextView并希望将其呈现为UITextView
是我注意的身体
<a href="/arc/item/21">food item - more item stuff</a>;`
Run Code Online (Sandbox Code Playgroud)
让我补充一点:它目前显示为蓝色并带下划线且无法点击.我想把它加粗而不是可点击的.我已经阅读过有关文档的内容,linkTextAttributes但是,没有使用它,它有点超出我的范围,我真的没有看到任何简单的方法来操纵它.我如何才能将上面的链接渲染为粗体和黑色(不是蓝色)并保持不可点击的性质?
它是一个富文本视图,文本中有多个图像(变体高度),每个图像位于两个段落之间.请参阅屏幕截图.
我知道Text Kit支持排除路径,是否可以基于此技术构建这样的富文本视图?在创建排除路径时,如何确定图像的位置?
提前致谢.
为了在自定义 UIView 中定位/缩放字体字形,我需要知道一些字形指标,例如: - 上升(字形从基线的高度,例如“g”位于基线之上的部分) - 下降(字形距基线的深度,例如“g”位于基线下方的部分) - 宽度 - 字距调整 - 斜体校正(字形中超过其斜体宽度的部分)
我尝试子类化NSLayoutManager并从drawGlyphs以下位置读取这些信息:
override func drawGlyphs(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) {
enumerateLineFragments(forGlyphRange: glyphsToShow) {
(rect, usedRect, textContainer, glyphRange, stop) in
for i in glyphsToShow.location ..< NSMaxRange(glyphsToShow) {
if let textContainer = self.textContainer(forGlyphAt: glyphsToShow.location, effectiveRange: nil) {
var glyphRect = self.boundingRect(forGlyphRange: NSMakeRange(i, 1), in:textContainer)
glyphRect.origin.x += origin.x;
glyphRect.origin.y += origin.y;
/// NOW I HAVE AT LEAST THE BOUNDING BOX
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但glyphRect …
textkit ×10
ios ×4
ios7 ×3
swift ×3
uitextview ×3
fonts ×2
objective-c ×2
emoji ×1
fontmetrics ×1
glyph ×1
ios16 ×1
nstextview ×1
swiftui ×1