2016-10-27 17 views
0

複数行のUIButtonが必要です。最初の行にはFontAwesomeのアイコンが表示され、2番目の行にはアイコンが説明されます。FontAwesomeを使用して複数行のUIButtonを作成するにはどうすればよいですか?

また、両方の行のフォントサイズは、各行で異なる必要があります。ここで

は、私は一瞬で持っているものです。

@IBOutlet weak var btnProfile: UIButton! 

let paraStyle = NSMutableParagraphStyle() 
paraStyle.lineBreakMode = NSLineBreakMode.byWordWrapping 
paraStyle.alignment = NSTextAlignment.center 

let icon = NSMutableAttributedString(string: "\u{f082}", attributes: [NSFontAttributeName: UIFont.init(name: "FontAwesome", size: 40)]) 
let text = NSMutableAttributedString(string:"\nProfile", attributes: [NSFontAttributeName:UIFont.systemFont(ofSize: 12.0)]) 

icon.append(text) 
icon.addAttribute(NSParagraphStyleAttributeName, value: paraStyle, range: NSRange(location:0,length: icon.length)) 

btnProfile.setAttributedTitle(icon, for: .normal) 

が、私は次のエラーを取得しています:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_SwiftValue renderingMode]: unrecognized selector sent to instance

私も内部の代わりの"\u{f082}"尋問シンボルの正方形を使用して試してみました問題は同じです。

私がコメントした場合、アプリケーションは例外をスローしないので、問題は最後の2行にあることがわかります。

enter image description here

、それがほとんどうまく機能:

はまた、私はストーリーボードを使用して、それを試してみました。両方の行はアイコン+テキストで表示されますが、テキストはアイコンのフォントとフォントサイズを持ち、それらを異なるものにします。ここではスクリーンショット:

enter image description here

私が間違って何をしているのですか?私はコードやストーリーボードでこれを解決すれば気にしません。

ありがとうございます!

+0

button.titleLabel .lineBreakMode = NSLineBreakMode.ByWordWrapping; button.titleLabel! !.numberOfLines = 2 //行数を無制限にしたい場合は0を設定し、タイトルアイコン\ nyourText ...を設定することができます私は助けてくれるでしょう – Joe

+0

@ジョー私は無制限の行を望んでいません。ちょうど2.私は0に行数を設定しようとしたが、それも動作しません、同じエラーが表示されます。 –

答えて

1

このコードを試してみてください:

スウィフト3でテスト

override func viewDidLoad() { 
    super.viewDidLoad() 

    //applying the line break mode 
    btnProfile?.titleLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping; 

    let buttonText: NSString = "⭐️ Favourite\nProfile" 

    //getting the range to separate the button title strings 
    let newlineRange: NSRange = buttonText.range(of: "\n") 

    //getting both substrings 
    var substring1: NSString = "" 
    var substring2: NSString = "" 

    if(newlineRange.location != NSNotFound) { 
     substring1 = buttonText.substring(to: newlineRange.location) as NSString 
     substring2 = buttonText.substring(from: newlineRange.location) as NSString 
    } 


    //assigning diffrent fonts to both substrings 
    let font:UIFont? = UIFont(name: "Chalkduster", size: 50.0) 
    let attrString = NSMutableAttributedString(string: substring1 as String, attributes: NSDictionary(object: font!, forKey: NSFontAttributeName as NSCopying) as? [String : Any])   
    let font1:UIFont? = UIFont(name: "Noteworthy-Light", size: 30.0) 
    let attrString1 = NSMutableAttributedString(string: substring2 as String, attributes: NSDictionary(object: font1!, forKey: NSFontAttributeName as NSCopying) as? [String : Any]) 

    //appending both attributed strings 
    attrString.append(attrString1) 

    //assigning the resultant attributed strings to the button 
    btnProfile.setAttributedTitle(attrString, for: UIControlState.normal) 
    btnProfile.titleLabel?.textAlignment = .center 

} 

出力:

enter image description here

+0

最初の行と2行目に異なるフォントサイズを追加するにはどうすればよいですか?私はそれらが同じフォントサイズであることを望んでいません。 –

+0

私はあなたにこのことを尋ねることを知っていました。私に見てください...ありがとう – Joe

+0

私は最小限で自分のコードを更新します.thanks – Joe

関連する問題