O biçimlendirmek mümkün mü text
bir de UILabel
bir göstermeye mermi noktasını ?
Varsa bunu nasıl yapabilirim?
O biçimlendirmek mümkün mü text
bir de UILabel
bir göstermeye mermi noktasını ?
Varsa bunu nasıl yapabilirim?
ALT+8 = •
Yanıtlar:
Dizinizdeki madde işareti karakteri için Unicode kod noktasını kullanabilirsiniz.
Amaç-c
myLabel.text = @"\u2022 This is a list item!";
Swift 4
myLabel.text = "\u{2022} This is a list item!"
myLabel.numberOfLines = 0
satır sonu karakterlerine saygı duyan çok satırlı bir etiket alır. Genel olarak UITextField
daha esnek olduğu için kullanmayı seviyorum . Örneğin, bir kullanıcının a ile çalışırken hangi karaktere dokunduğunu kolayca tespit edebilirsiniz, bunu a ile UITextField
yapabileceğinizi sanmıyorum UILabel
. Metin görünümleri ayrıca diğer birçok düzgün özelliğe sahiptir.
option+8
sadece ekle " • "
Ben bile kendim için böyle bir şey arıyordum textView
. Yaptığım şey, sadece dizgemle yukarıdaki dizeyi ekleyin ve onu benim için iletin textView
, aynısı için labels
de yapılabilir .
Bunu gelecekteki Görüntüleyici için yanıtladım.
İşte Swift ile güzel bir çözüm
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)
Madde işareti nitelikleri ekleyin
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
}
İşte sonuç:
Hızlı 3.1'de
lblItemName.text = "\u{2022} This is a list item!"
Bu bağlantıya göz atın, metni madde işaretleri / diğer semboller / resim ile (UILabel'in attributeText özelliğini kullanarak) liste öğesi sembolü olarak biçimlendirmek için Özel bir görünüm yaptım (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
}
}
Madde işaretleri için metin NSAttributedString
girintisini de hizalamak istiyorsanız , uygun girinti ve aralık özellikleriyle a oluşturan aşağıdaki yöntemi kullanabilirsiniz :
- (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;
}
Ve bu yöntemi NSArray
, metinlerle bir geçerek ve zaten bir 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];
Evet. Aşağıdaki madde işaretini kopyalayıp yapıştırın: •
Swift'in derleyicisi madde işaretini Xcode içinde istendiği gibi yorumlayabilir ve görüntüleyebilir, başka hiçbir şeye gerek yoktur.
Yeniden kullan
extension String {
static var bullet: String {
return "• "
}
}
print(String.bullet + "Buy apples")
let secondPoint: String = .bullet + "Buy oranges"
print(secondPoint)
çıktı
• Buy apples
• Buy oranges
Yeniden kullanılabilir dizi
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)
çıktı
• get apples
• get oranges
• get a bannana
Benim gibi madde işaretli metin görüntüleme metni arayan biri varsa, cevap aşağıdadır. Bu arada, sadece statik metin için çalışıyor.
• Better experience - Refer a friend and How to Play \n• Tournaments performance improvement\n• UI/UX Improvements\n• Critical bug fixes
Yukarıdaki metni metin görünümüne atadım. Benim için tasarlandığı gibi çalıştı.
İşte @ krunal'ın Swift 5 NSAttributedString
uzantısına yeniden düzenlenmiş çözümü :
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 metinlerine HTML olarak davranmaz.