こんなUILabel
感じの文章を作りたい
これどうやってするの?テキストが小さい場合、行も小さくする必要があります。
NSAttributedString
およびUILabel attributedText
プロパティを使用してこれを行うことができます。
こんなUILabel
感じの文章を作りたい
これどうやってするの?テキストが小さい場合、行も小さくする必要があります。
NSAttributedString
およびUILabel attributedText
プロパティを使用してこれを行うことができます。
回答:
SWIFT 4更新コード
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
次に:
yourLabel.attributedText = attributeString
文字列の一部を打つようにして範囲を指定するには
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Objective-C
で>のiOS 6.0 UILabel
をサポートNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
迅速
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
定義:
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
name:属性名を指定する文字列。属性キーは、別のフレームワークから提供することも、独自に定義したカスタムキーにすることもできます。システム提供の属性キーの場所については、NSAttributedStringクラスリファレンスの概要セクションを参照してください。
value:名前に関連付けられた属性値。
aRange:指定された属性と値のペアが適用される文字の範囲。
その後
yourLabel.attributedText = attributeString;
以下のためlesser than iOS 6.0 versions
必要な3-rd party component
これを実行します。1つはTTTAttributedLabelで、もう1つはOHAttributedLabelです。
Swiftでは、単一の取り消し線のスタイルに列挙型を使用します。
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
追加の取り消し線スタイル(.rawValueを使用して列挙型にアクセスすることを忘れないでください):
取り消し線パターン(スタイルとORで結合):
取り消し線がスペースではなく単語にのみ適用されるように指定します。
私はこの単純なケースNSAttributedString
よりも好みNSMutableAttributedString
ます:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
属性付き文字列のNSUnderlineStyleAttributeName
およびNSStrikethroughStyleAttributeName
属性の両方を指定するための定数:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Swift 5.0の取り消し線
let attributeString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range: NSMakeRange(0, attributeString.length))
self.yourLabel.attributedText = attributeString
それは魅力のように私のために働いた。
拡張として使用する
extension String {
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range:NSMakeRange(0,attributeString.length))
return attributeString
}
}
このような電話
myLabel.attributedText = "my string".strikeThrough()
取り消し線を有効/無効にするUILabel拡張。
extension UILabel {
func strikeThrough(_ isStrikeThrough:Bool) {
if isStrikeThrough {
if let lblText = self.text {
let attributeString = NSMutableAttributedString(string: lblText)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0,attributeString.length))
self.attributedText = attributeString
}
} else {
if let attributedStringText = self.attributedText {
let txt = attributedStringText.string
self.attributedText = nil
self.text = txt
return
}
}
}
}
次のように使用します。
yourLabel.strikeThrough(btn.isSelected) // true OR false
SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text Goes Here")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
self.lbl_productPrice.attributedText = attributeString
他の方法は、文字列拡張拡張を使用することです
extension String{
func strikeThrough()->NSAttributedString{
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: self)
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
return attributeString
}
}
関数の呼び出し:そのまま使用
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
@Yahyaへのクレジット -2017年12月更新kuzduへの
クレジット -2018年8月更新
value
0
パスインし、プルネンドゥロイパスを渡すことです。value: NSUnderlineStyle.styleSingle.rawValue
NSMutableAttributedStringを使用して、IOS 6でそれを行うことができます。
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Swift iOSでUILabelテキストを取り消します。試してみてくださいこれは私のために働いています
let attributedString = NSMutableAttributedString(string:"12345")
attributedString.addAttribute(NSAttributedStringKey.baselineOffset, value: 0, range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSNumber(value: NSUnderlineStyle.styleThick.rawValue), range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSAttributedStringKey.strikethroughColor, value: UIColor.gray, range: NSMakeRange(0, attributedString.length))
yourLabel.attributedText = attributedString
styleSingle、styleThick、styleDoubleなどの「strikethroughStyle」を変更できます
スウィフト5
extension String {
/// Apply strike font on text
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: 1,
range: NSRange(location: 0, length: attributeString.length))
return attributeString
}
}
例:
someLabel.attributedText = someText.strikeThrough()
テーブルビューセル(Swift)でこれを行う方法を探している人は、次のように.attributeTextを設定する必要があります。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TheCell")!
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: message)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
cell.textLabel?.attributedText = attributeString
return cell
}
取り消し線を削除したい場合は、これを実行してください。
cell.textLabel?.attributedText = nil
Swift 4.2
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: product.price)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length))
lblPrice.attributedText = attributeString
パーティーに遅れるかもしれない。
とにかく、私は知っていますNSMutableAttributedString
が、最近は少し異なるアプローチで同じ機能を実現しました。
上記の手順をすべて実行した後、私のラベル、UIView、およびその制約は下の画像のようになりました。
以下のコードを使用
NSString* strPrice = @"£399.95";
NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:strPrice];
[finalString addAttribute: NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger: NSUnderlineStyleSingle] range: NSMakeRange(0, [titleString length])];
self.lblOldPrice.attributedText = finalString;
複数行のテキストストライクで問題が発生した場合
let attributedString = NSMutableAttributedString(string: item.name!)
//necessary if UILabel text is multilines
attributedString.addAttribute(NSBaselineOffsetAttributeName, value: 0, range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSStrikethroughStyleAttributeName, value: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue), range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSStrikethroughColorAttributeName, value: UIColor.darkGray, range: NSMakeRange(0, attributedString.length))
cell.lblName.attributedText = attributedString
文字列拡張を作成し、以下のメソッドを追加します
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
次に、このようなラベルに使用します
yourLabel.attributedText = String.makeSlashText("Hello World!")
NSStrikethroughStyleAttributeNameがNSAttributedStringKey.strikethroughStyleに変更されているため、これはSwift 4で使用できます。
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
self.lbl.attributedText = attributeString
Swift 4および5
extension NSAttributedString {
/// Returns a new instance of NSAttributedString with same contents and attributes with strike through added.
/// - Parameter style: value for style you wish to assign to the text.
/// - Returns: a new instance of NSAttributedString with given strike through.
func withStrikeThrough(_ style: Int = 1) -> NSAttributedString {
let attributedString = NSMutableAttributedString(attributedString: self)
attributedString.addAttribute(.strikethroughStyle,
value: style,
range: NSRange(location: 0, length: string.count))
return NSAttributedString(attributedString: attributedString)
}
}
例
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)