質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.60%

KILabel を使うと UILabel が半分しか表示しない・・・

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 696

masamasamasa

score 65

 前提

swiftでSNSのクローンアプリを初めて作成してます。

 問題

 UIlabelの高さを自動で調整しつつ、KILabel を使うと UILabel が半分で切れる

あああ

 やりたいこと

UIlabelの高さを自動で調整しつつ、KILabel を使いたい (途中で切れないように)

 試したこと

 試したこと  結果 
 高さの自動調整 だけ   機能する 
 KILabel だけ   機能する 
 KILabel と 高さの自動調整 ダメ

特に

tableView.estimatedRowHeight = 521
tableView.rowHeight = UITableViewAutomaticDimension


の2行とKILAbelを合わせると機能しなくなる

 制約

イメージ説明

 開発環境

MacOS Mojave 10.14
Xcode 10.0
Swift 3.0

すみませんが、よろしくお願いします。

 code

viewController

var post = Post()
var user = User()

@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
        super.viewDidLoad()
        tableView.estimatedRowHeight = 521
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.separatorStyle = .none
        tableView.dataSource = self
    }

extension DetailViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath) as! HomeTableViewCell
        cell.post = post
        cell.user = user
        cell.delegate = self
        return cell
    }
}

view (HomeTableViewCell)

@IBOutlet weak var captionLabel: KILabel!

    var post: Post? {
        didSet {
            updateView()
        }
    }

    func updateView() {
        captionLabel.numberOfLines = 0
        captionLabel.lineBreakMode = NSLineBreakMode.byWordWrapping
        captionLabel.sizeToFit()
        captionLabel.text = post?.caption
        captionLabel.hashtagLinkTapHandler = { label, string, range in
            let tag = String(string.dropFirst())
            self.delegate?.goToHashTag(tag: tag)
        }
        if let photoUrlString = post?.photoUrl {
            let photoUrl = URL(string: photoUrlString)
            postImageView.sd_setImage(with: photoUrl)
        }
    }

高さ制約を挿入したら解決しました
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

おそらくレイアウトが終わって高さが決定した後にテキストがattributedに変更されているのだと思います

もしcellForRowAtIndexPathでtextをセットしているなら、その後で強制的にレイアウトしてみてください

cell.label.text = "hoge"
cell.layoutIfNeeded()   // レイアウトしてしまう
return cell

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/07 23:58

    ちなみに問題なかったコードです
    https://gist.github.com/osanaikoutarou/453aa5d4478a1ca9a464eb296cf60a1c

    キャンセル

  • 2018/11/08 07:35

    コードまでいただきありがとうございました。
    大変参考になりました。
    追加した写真のように、高さ制約を入れたら直りました。
    高さ制約を入れなくても機能するはずだと思うのですが・・・
    とにかく、kosanaiの協力のおかげでなんとかなりました。
    ありがとうございました!

    キャンセル

  • 2018/11/08 09:00

    高さ固定は、self-sizingをしないということなので意味合いが変わってきます
    もちろん、高さのNSLayoutConstraintをプログラムから指定してあげることもできます
    (テキストから高さを計算する → NSLayoutConstraintに自分で反映)

    あと思いつくのは、LabelのContentCompressionResistancePriorityのVerticalを1000にしてみるくらいですね(他と競合してるならこれで解決する可能性があります)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る