Ada dua pertanyaan.
Saya bertanya-tanya apakah mungkin membuat UIButton dengan dua baris teks
Ini dimungkinkan melalui penggunaan papan cerita atau secara terprogram.
Papan cerita:
Ubah 'Line Break Mode' menjadi Character Wrap atau Word Wrap dan gunakan tombol Alt / Option + Enter untuk memasukkan baris baru di bidang Judul UIButton.
Secara terprogram:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
btnTwoLine?.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping;
}
Saya ingin setiap baris memiliki ukuran font yang berbeda 1
Kasus terburuknya adalah, Anda dapat menggunakan UIButton
kelas khusus dan menambahkan dua label di dalamnya.
Cara yang lebih baik adalah, manfaatkan NSMutableAttributedString
. Perhatikan bahwa, ini hanya dapat dicapai melalui program.
Cepat 5:
@IBOutlet weak var btnTwoLine: UIButton?
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
//applying the line break mode
textResponseButton?.titleLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping;
let buttonText: NSString = "hello\nthere"
//getting the range to separate the button title strings
let newlineRange: NSRange = buttonText.range(of: "\n")
//getting both substrings
var substring1 = ""
var substring2 = ""
if(newlineRange.location != NSNotFound) {
substring1 = buttonText.substring(to: newlineRange.location)
substring2 = buttonText.substring(from: newlineRange.location)
}
//assigning diffrent fonts to both substrings
let font1: UIFont = UIFont(name: "Arial", size: 17.0)!
let attributes1 = [NSMutableAttributedString.Key.font: font1]
let attrString1 = NSMutableAttributedString(string: substring1, attributes: attributes1)
let font2: UIFont = UIFont(name: "Arial", size: 11.0)!
let attributes2 = [NSMutableAttributedString.Key.font: font2]
let attrString2 = NSMutableAttributedString(string: substring2, attributes: attributes2)
//appending both attributed strings
attrString1.append(attrString2)
//assigning the resultant attributed strings to the button
textResponseButton?.setAttributedTitle(attrString1, for: [])
}
Swift yang lebih tua
@IBOutlet weak var btnTwoLine: UIButton?
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
//applying the line break mode
btnTwoLine?.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping;
var buttonText: NSString = "hello\nthere"
//getting the range to separate the button title strings
var newlineRange: NSRange = buttonText.rangeOfString("\n")
//getting both substrings
var substring1: NSString = ""
var substring2: NSString = ""
if(newlineRange.location != NSNotFound) {
substring1 = buttonText.substringToIndex(newlineRange.location)
substring2 = buttonText.substringFromIndex(newlineRange.location)
}
//assigning diffrent fonts to both substrings
let font:UIFont? = UIFont(name: "Arial", size: 17.0)
let attrString = NSMutableAttributedString(
string: substring1 as String,
attributes: NSDictionary(
object: font!,
forKey: NSFontAttributeName) as [NSObject : AnyObject])
let font1:UIFont? = UIFont(name: "Arial", size: 11.0)
let attrString1 = NSMutableAttributedString(
string: substring2 as String,
attributes: NSDictionary(
object: font1!,
forKey: NSFontAttributeName) as [NSObject : AnyObject])
//appending both attributed strings
attrString.appendAttributedString(attrString1)
//assigning the resultant attributed strings to the button
btnTwoLine?.setAttributedTitle(attrString, forState: UIControlState.Normal)
}
Keluaran
Saya mencari topik yang hampir sama, hanya saja saya tidak memerlukan dua ukuran font yang berbeda. Jika seseorang mencari solusi sederhana:
sumber
Saya melihat masalah di sebagian besar solusi yaitu saat membuat mode jeda baris ke "Bungkus Karakter", baris kedua akan dibiarkan sejajar dengan baris pertama
Untuk membuat semua garis berada di tengah. cukup ubah judul From Plain menjadi Attributed dan kemudian Anda dapat membuat setiap baris menjadi tengah
sumber
ubah hentian baris menjadi bungkus karakter, pilih tombol Anda dan di inspektur atribut pergi ke jeda baris dan ubah ke bungkus karakter
sumber
Sintaks SWIFT 3
sumber
Saya telah memperbaiki ini dan solusi saya hanya ada di Storyboard.
Perubahan:
Itu ditambahkan di Identity Inspector -> User Defined Runtime Attributes (KeyPaths ini):
Atribut Waktu Proses yang Ditentukan Pengguna
Saya menambahkan ini di inspektur atribut:
Bungkus kata
sumber
Anda perlu melakukan beberapa ini dalam kode. Anda tidak dapat mengatur 2 font berbeda di IB. Selain mengubah mode jeda baris menjadi bungkus karakter, Anda memerlukan sesuatu seperti ini untuk menyetel judul,
sumber
Salah satu cara untuk melakukannya adalah dengan label, saya rasa. Saya melakukan ini, dan tampaknya berhasil. Saya bisa membuat ini sebagai UIButton dan kemudian mengekspos labelnya, saya kira. Saya tidak tahu apakah ini masuk akal.
sumber
jalanku:
sumber
Sayangnya, solusi yang disarankan tidak berhasil bagi saya ketika saya ingin memiliki tombol mutliline di dalam CollectionView. Kemudian seorang kolega menunjukkan kepada saya solusi yang ingin saya bagikan jika seseorang memiliki masalah yang sama - semoga ini membantu! Buat kelas yang mewarisi dari UIControl dan kembangkan dengan label, yang kemudian akan berperilaku serupa seperti tombol.
sumber