Можно ли отформатировать text
в a, UILabel
чтобы отобразить маркер ?
Если да, то как я могу это сделать?
Можно ли отформатировать text
в a, UILabel
чтобы отобразить маркер ?
Если да, то как я могу это сделать?
ALT+8 = •
Ответы:
Возможно, использовать кодовую точку Unicode для символа маркера в вашей строке?
Цель-c
myLabel.text = @"\u2022 This is a list item!";
Swift 4
myLabel.text = "\u{2022} This is a list item!"
myLabel.numberOfLines = 0
дает вам многострочную метку, которая будет учитывать символы разрыва строки. В целом, мне нравится использовать, UITextField
потому что он более гибкий. Например, вы можете легко определить, какой символ нажимал пользователь при работе с. UITextField
Я не думаю, что вы можете сделать это с UILabel
. Текстовые представления также имеют много других полезных функций.
option+8
просто добавь " • "
Даже я искал что-то подобное для своего textView
. То, что я сделал, просто добавьте строку выше с моей строкой и передайте ее мне textView
, то же самое можно сделать и для labels
.
Я ответил на это для будущего зрителя.
Вот хорошее решение со Swift
let label = UILabel()
label.frame = CGRect(x: 40, y: 100, width: 280, height: 600)
label.textColor = UIColor.lightGray
label.numberOfLines = 0
let arrayString = [
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
]
label.attributedText = add(stringList: arrayString, font: label.font, bullet: "")
self.view.addSubview(label)
Добавить атрибуты маркера
func add(stringList: [String],
font: UIFont,
bullet: String = "\u{2022}",
indentation: CGFloat = 20,
lineSpacing: CGFloat = 2,
paragraphSpacing: CGFloat = 12,
textColor: UIColor = .gray,
bulletColor: UIColor = .red) -> NSAttributedString {
let textAttributes: [NSAttributedStringKey: Any] = [NSAttributedStringKey.font: font, NSAttributedStringKey.foregroundColor: textColor]
let bulletAttributes: [NSAttributedStringKey: Any] = [NSAttributedStringKey.font: font, NSAttributedStringKey.foregroundColor: bulletColor]
let paragraphStyle = NSMutableParagraphStyle()
let nonOptions = [NSTextTab.OptionKey: Any]()
paragraphStyle.tabStops = [
NSTextTab(textAlignment: .left, location: indentation, options: nonOptions)]
paragraphStyle.defaultTabInterval = indentation
//paragraphStyle.firstLineHeadIndent = 0
//paragraphStyle.headIndent = 20
//paragraphStyle.tailIndent = 1
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.paragraphSpacing = paragraphSpacing
paragraphStyle.headIndent = indentation
let bulletList = NSMutableAttributedString()
for string in stringList {
let formattedString = "\(bullet)\t\(string)\n"
let attributedString = NSMutableAttributedString(string: formattedString)
attributedString.addAttributes(
[NSAttributedStringKey.paragraphStyle : paragraphStyle],
range: NSMakeRange(0, attributedString.length))
attributedString.addAttributes(
textAttributes,
range: NSMakeRange(0, attributedString.length))
let string:NSString = NSString(string: formattedString)
let rangeForBullet:NSRange = string.range(of: bullet)
attributedString.addAttributes(bulletAttributes, range: rangeForBullet)
bulletList.append(attributedString)
}
return bulletList
}
Вот результат:
В быстрой версии 3.1
lblItemName.text = "\u{2022} This is a list item!"
Проверьте эту ссылку, я создал пользовательское представление для форматирования текста с помощью маркеров / других символов / изображений (используя свойство attributeText UILabel) в качестве символа элемента списка (Swift 3.0) https://github.com/akshaykumarboth/SymbolTextLabel-iOS- Swift
import UIKit
class ViewController: UIViewController {
@IBOutlet var symbolView: SymbolTextLabel!
var testString = "Understanding the concept of sales"
var bulletSymbol = "\u{2022}"
var fontsize: CGFloat= 18
override func viewDidLoad() {
super.viewDidLoad()
//First way // Dynamically creating SymbolTextLabel object
let symbolTextLabel = SymbolTextLabel(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
symbolTextLabel.setText(text: testString, symbolCode: bulletSymbol) //setting text and symbol of text item
symbolTextLabel.setFontSize(textSize: fontsize) // setting font size
//symbolTextLabel.setSpacing(spacing: 5) // setting space between symbol and text
self.view.addSubview(symbolTextLabel)
//second way // from storyboard or interface builder
symbolView.setText(text: testString, symbolCode: bulletSymbol)
//setting text and symbol of text item
symbolView.setFontSize(textSize: fontsize) // setting font size
//symbolView.setSpacing(spacing: 5) // setting space between symbol and text
}
}
Если вы хотите выровнять отступ текста для маркеров, вы можете использовать следующий метод, который строит NSAttributedString
с правильными свойствами отступа и интервала:
- (NSAttributedString *)attributedStringForBulletTexts:(NSArray *)stringList
withFont:(UIFont *)font
bulletString:(NSString *)bullet
indentation:(CGFloat)indentation
lineSpacing:(CGFloat)lineSpacing
paragraphSpacing:(CGFloat)paragraphSpacing
textColor:(UIColor *)textColor
bulletColor:(UIColor *)bulletColor {
NSDictionary *textAttributes = @{NSFontAttributeName: font,
NSForegroundColorAttributeName: textColor};
NSDictionary *bulletAttributes = @{NSFontAttributeName: font, NSForegroundColorAttributeName: bulletColor};
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.tabStops = @[[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentLeft location:indentation options:@{}]];
paragraphStyle.defaultTabInterval = indentation;
paragraphStyle.lineSpacing = lineSpacing;
paragraphStyle.paragraphSpacing = paragraphSpacing;
paragraphStyle.headIndent = indentation;
NSMutableAttributedString *bulletList = [NSMutableAttributedString new];
for (NSString *string in stringList) {
NSString *formattedString = [NSString stringWithFormat:@"%@\t%@\n", bullet, string];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:formattedString];
if (string == stringList.lastObject) {
paragraphStyle = [paragraphStyle mutableCopy];
paragraphStyle.paragraphSpacing = 0;
}
[attributedString addAttributes:@{NSParagraphStyleAttributeName: paragraphStyle} range:NSMakeRange(0, attributedString.length)];
[attributedString addAttributes:textAttributes range:NSMakeRange(0, attributedString.length)];
NSRange rangeForBullet = [formattedString rangeOfString:bullet];
[attributedString addAttributes:bulletAttributes range:rangeForBullet];
[bulletList appendAttributedString:attributedString];
}
return bulletList;
}
И вы можете использовать этот метод следующим образом, передав NSArray
текст и предоставив вам уже UILabel
:
NSArray *stringArray = @[@"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
@"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
@"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
@"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
];
label.attributedText = [self attributedStringForBulletTexts:stringArray
withFont:label.font
bulletString:@"•"
indentation:15
lineSpacing:2
paragraphSpacing:10
textColor:UIColor.blackColor
bulletColor:UIColor.grayColor];
Да. Скопируйте и вставьте следующий маркер: •
компилятор Swift может интерпретировать и отображать маркер по желанию в Xcode, больше ничего не нужно.
Повторное использование
extension String {
static var bullet: String {
return "• "
}
}
print(String.bullet + "Buy apples")
let secondPoint: String = .bullet + "Buy oranges"
print(secondPoint)
выход
• Buy apples
• Buy oranges
Многоразовый массив
extension Array where Element == String {
var bulletList: String {
var po = ""
for (index, item) in self.enumerated() {
if index != 0 {
po += "\n"
}
po += .bullet + item
}
return po
}
}
print(["get apples", "get oranges", "get a bannana"].bulletList)
выход
• get apples
• get oranges
• get a bannana
Если кто-то, как я, ищет текст для текстового просмотра с маркерами, то ответ ниже. Кстати работает только для статического текста.
• Better experience - Refer a friend and How to Play \n• Tournaments performance improvement\n• UI/UX Improvements\n• Critical bug fixes
Я назначил текст выше для textview. У меня все получилось так, как задумано
Вот решение от @krunal, преобразованное в NSAttributedString
расширение Swift 5 :
import UIKit
public extension NSAttributedString {
static func makeBulletList(from strings: [String],
bulletCharacter: String = "\u{2022}",
bulletAttributes: [NSAttributedString.Key: Any] = [:],
textAttributes: [NSAttributedString.Key: Any] = [:],
indentation: CGFloat = 20,
lineSpacing: CGFloat = 1,
paragraphSpacing: CGFloat = 10) -> NSAttributedString
{
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.defaultTabInterval = indentation
paragraphStyle.tabStops = [
NSTextTab(textAlignment: .left, location: indentation)
]
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.paragraphSpacing = paragraphSpacing
paragraphStyle.headIndent = indentation
let bulletList = NSMutableAttributedString()
for string in strings {
let bulletItem = "\(bulletCharacter)\t\(string)\n"
var attributes = textAttributes
attributes[.paragraphStyle] = paragraphStyle
let attributedString = NSMutableAttributedString(
string: bulletItem, attributes: attributes
)
if !bulletAttributes.isEmpty {
let bulletRange = (bulletItem as NSString).range(of: bulletCharacter)
attributedString.addAttributes(bulletAttributes, range: bulletRange)
}
bulletList.append(attributedString)
}
if bulletList.string.hasSuffix("\n") {
bulletList.deleteCharacters(
in: NSRange(location: bulletList.length - 1, length: 1)
)
}
return bulletList
}
}
UILabel
s не обрабатывают свой текст как HTML.