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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. 6*5FYU7JFXͱ"VUP-BZPVU

    View full-size slide

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

    View full-size 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 full-size slide

  8. 6*5BCMF7JFXͱ"VUP-BZPVU

    View full-size slide

  9. UITableViewCell
    UITextView

    View full-size slide

  10. UITableViewCell
    UITextView

    View full-size 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 full-size slide

  12. 6*5BCMF7JFX$FMMͷߴ͞

    View full-size 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 full-size 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 full-size slide

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

    View full-size slide

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

    View full-size slide