Upgrade to Pro — share decks privately, control downloads, hide ads and more …

あなたの知らない UIKit の世界 — UITableView に UITextView を置きたい

cockscomb
September 06, 2016

あなたの知らない UIKit の世界 — UITableView に UITextView を置きたい

cockscomb

September 06, 2016
Tweet

More Decks by cockscomb

Other Decks in Programming

Transcript

  1. ͋ͳͨͷ஌Βͳ͍6*,JUͷੈք

    View Slide

  2. id:cockscomb
    Ճ౻ਘथ
    גࣜձࣾ͸ͯͳ
    ԿΒ͔ͷࣗݾ঺հ

    View Slide

  3. 6*5BCMF7JFXʹ
    6*5FYU7JFXΛஔ͖͍ͨ

    View Slide

  4. 6*5FYU7JFXͰจࣈΛೖྗ
    6*5BCMF7JFXͰෳ਺ͷೖྗཝ

    View Slide

  5. 6*5FYU7JFXͱ"VUP-BZPVU

    View Slide

  6. let textView = UITextView()
    textView.text = "Think different"
    textView.intrinsicContentSize() // {w -1 h -1}

    View Slide

  7. let textView = UITextView()
    textView.text = "Think different"
    textView.intrinsicContentSize() // {w -1 h -1}
    textView.scrollEnabled = false
    textView.intrinsicContentSize() // {w 86 h 30}

    View Slide

  8. 6*5BCMF7JFXͱ"VUP-BZPVU

    View Slide

  9. UITableViewCell
    UITextView

    View Slide

  10. UITableViewCell
    UITextView

    View Slide

  11. override func tableView(tableView: UITableView,
    estimatedHeightForRowAtIndexPath indexPath: NSIndexPath)
    -> CGFloat {
    return 200
    }
    override func tableView(tableView: UITableView,
    heightForRowAtIndexPath indexPath: NSIndexPath)
    -> CGFloat {
    return UITableViewAutomaticDimension
    }

    View Slide

  12. 6*5BCMF7JFX$FMMͷߴ͞

    View Slide

  13. UITableView.beginUpdates()
    Discussion
    Call this method if you want subsequent insertions, deletion, and selection operations
    (for example, cellForRowAtIndexPath: and indexPathsForVisibleRows) to be
    animated simultaneously. You can also use this method followed by the endUpdates
    method to animate the change in the row heights without reloading the cell. This group
    of methods must conclude with an invocation of endUpdates. These method pairs can
    be nested. If you do not make the insertion, deletion, and selection calls inside this
    block, table attributes such as row count might become invalid. You should not call
    reloadData within the group; if you call this method within the group, you must
    perform any animations yourself.

    View Slide

  14. UITableView.beginUpdates()
    Discussion
    Call this method if you want subsequent insertions, deletion, and selection operations
    (for example, cellForRowAtIndexPath: and indexPathsForVisibleRows) to be
    animated simultaneously. You can also use this method followed by the endUpdates
    method to animate the change in the row heights without reloading the cell. This group
    of methods must conclude with an invocation of endUpdates. These method pairs can
    be nested. If you do not make the insertion, deletion, and selection calls inside this
    block, table attributes such as row count might become invalid. You should not call
    reloadData within the group; if you call this method within the group, you must
    perform any animations yourself.

    View Slide

  15. extension ViewController: UITextViewDelegate {
    func textViewDidChange(textView: UITextView) {
    UIView.performWithoutAnimation {
    self.tableView.beginUpdates()
    self.tableView.endUpdates()
    }
    }
    }

    View Slide

  16. ͋ͳͨͷ஌Βͳ͍6*,JUͷੈք
    w 6*5FYU7JFXͷεΫϩʔϧͱJOUSJOTJDDPOUFOUTJ[F
    w 6*5BCMF7JFXͷ"VUP-BZPVU
    w 6*5BCMF7JFXʹDFMMͷߴ͞Λ࠶ܭࢉͤ͞Δํ๏

    View Slide