前提・実現したいこと
[swift]
<あらかじめ用意した文章をチャット風に表示>
Label内の文字を左寄せかつラベルの中心に表示させたい
発生している問題・エラーメッセージ!
Labelに関してはstoryboardは使用せず、コードにて表示させています。
下記のコードではラベル内の文章は左寄りになって揃っていますが、ラベルの左側と文字との間隔が狭すぎて、見辛くなってしまいます。
。
かといってlabel.textAlignment = NSTextAlignment.centerとしてセンター寄りにするとラベルと文字との余白はいい感じになりますが、2行目以降の文章が中心にきてしまいます。
理想はLINEやその他チャットアプリのような感じです。
該当のソースコード
import UIKit let leibun = [(title: "てすと", items: ["あいあいあいあいああいあいあい", "うえうえうえうえうえうえうえうえうえうえうえうえうえうえうえうええうえうえ","えおえおえおえおえおえおえおえおえおえおええおえおえおえお","おあおあおあおあおあおあおあおあおあおあ","お","かかかかかかかかかかかかかかかかかかかかかかかかかかか","けけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけ",]), ] class ViewController: UIViewController { var i = 0 var j = 0 var unknown = 50 var labelsize = 0 @IBAction func tapScreen(_ sender: Any) { let label = UILabel() if i == leibun[j].items.count { return; }; if i%2 == 0 { label.font = label.font.withSize(16) label.text = "(leibun[j].items[i])" label.textColor = UIColor.black label.backgroundColor = UIColor.yellow label.layer.cornerRadius = 15 label.clipsToBounds = true label.layer.borderWidth = 1 label.layer.borderColor = UIColor.brown.cgColor label.sizeToFit() //300超えたらラベルを制御(仮) labelsize = Int(label.frame.width) if labelsize >= 300 { label.numberOfLines = 0 label.lineBreakMode = .byCharWrapping label.frame.size.width = 300 label.sizeToFit() label.frame.size.height += 15 label.frame.size.width += 40 } else { label.sizeToFit() label.frame.size.height += 15 label.frame.size.width += 20 } label.frame.origin.x = CGFloat(view.frame.origin.x + view.frame.size.width-label.frame.width-15) label.frame.origin.y = CGFloat(unknown) label.textAlignment = NSTextAlignment.left label.numberOfLines = 0 self.view.addSubview(label) }; if i%2 == 1 { label.font = label.font.withSize(16) label.text = "(leibun[j].items[i])" label.textColor = UIColor.white label.backgroundColor = UIColor.gray label.layer.cornerRadius = 15 label.clipsToBounds = true label.layer.borderWidth = 1 label.layer.borderColor = UIColor.black.cgColor label.sizeToFit() //300超えたらラベルを制御(仮) labelsize = Int(label.frame.width) if labelsize >= 300 { label.numberOfLines = 0 label.lineBreakMode = .byCharWrapping label.frame.size.width = 300 label.sizeToFit() label.frame.size.height += 15 label.frame.size.width += 40 } else { label.sizeToFit() label.frame.size.height += 15 label.frame.size.width += 20 } label.frame.origin.x = CGFloat(15) label.frame.origin.y = CGFloat(unknown) label.textAlignment = NSTextAlignment.left label.numberOfLines = 0 self.view.addSubview(label) }; i = i + 1 unknown = Int(label.frame.height) + Int(label.frame.origin.y) + 15 } override func viewDidLoad() { super.viewDidLoad() } }
試したこと
文章の先頭に空白を入れてラベル内に表示される位置をずらすという方法はありますが、力技ですし、あまり利用したくありません。文章が長くなるとその文作業が増えてしまいますので、手間がかかってしまいます。
ご教授いただければ幸いです。よろしくお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/01 14:50
2019/04/01 16:06 編集