やりたいこと こういうのを作る。 方法 Storyboard上でtableViewのcellにtextViewを配置 textViewに Auto Layout の制約を設定 textViewの上下左右のスペースに対して制約を設ける textViewのプロパティ Scrolling Enabled のチェックを外す textViewが自動でcellの高さを調整するように設定 override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 10000 // ~~~ } ここで注意! estimatedRowHeight を十分大きな値にしておかないと、textViewのサイズが画面を超えた状態
I am using a grouped UITableView with static cells for an options screen/scene. Everything is done in Xcode 6.1 / iOS 8.1.x / Storyboard using Autolayout. Within the table groups there are mixed types of cells and there are two types that cause me problems: Cells with custom style and Cells with style "Right Detail" On cell #1 I can set a constraint for the left margin between the label and the le
iPhone 6 PlusのUITableViewのseparatorInsetの値が違うことが原因で、カスタムセルのラベルがズレる問題を解決iOSAutoLayoutUITableViewiOS8 【追記】 http://qiita.com/yuya_presto/items/08b0656f67a59c8c2d03#標準スタイルのセルと左右の余白を揃えたい場合 のやり方の方が良さそうです。 UITableViewのseparatorInsetは、テーブルビューの罫線のポジション指定用のプロパティです。 iOS 8の多くの端末の場合、デフォルトでleft: 15が指定されています。 UIEdgeInsetsZeroを指定して、iOS 6までのように罫線を左端まで延ばすTipsをよく見かけますが、それは本質では無く、iOSの設定画面のようにラベルの左端から始めるなど、 適切な値に設定する
[iOS] UITableViewのtableHeaderView/tableFooterViewをAutoLayoutに対応iOSUITableViewSwifttableHeaderViewtableFooterView この記事は UITableView の tableHeaderView/tableFooterView にAutoLayoutを利用する方法について書いていきます。 ちなみに元々は岸川さんのツイートを参考に(というか丸パクリ)した旨をツイートするとどこかに書いておいてくれとの依頼があった物です。 元々のコードはこちらです。 わかる人が見れば元のコードを見るだけで分かるかと思いますので、この記事ではどうしてこれで対応が可能なのか分からない人向けの説明をしようと思います。 headerView.translatesAutoresizingMaskIntoConstrain
UITableViewCellの高さが変わるアニメーションを行うには、UITableView.beginUpdates UITableView.endUpdatesでCell高さ変更処理を挟むことで実現できます。 tableView.beginUpdates() // Cell高さが変更されるような処理 tableView.endUpdates() ここで、Cell内部にある、VerticalなUIStackViewの一部要素の表示非表示を切り替えてアニメーションする場合、UITableView側のアニメーション設定と合わせて、UIStackView側のアニメーション設定が必要で、Duration設定を正しく設定しないと、アニメーションが安定しません。 結論から言うと、UITableView側のアニメーションのDuration: 0.3と同じ時間となるよう、UIStackView側のDur
かなりマニアックなtipsシリーズです。 UITableViewCellにUIButtonを置いた場合、タッチしてすぐに指を離すとボタンがハイライト状態になりません。プログラム的に見ると、ちゃんと押されているのですが・・・ 使ってる側から見ると、まったく反応していないように見えて不親切です。 しばらく押してから離すとハイライト状態になりますが・・・ わかりにくいですよね? これをどうにかする方法のメモです。 動作を確認した環境 環境 情報 Xcode 7.2.1 (7C1002) iOS 9.2 Swift 2.1.1 Date 2016/2/23 すぐに反応するようにする方法 すぐに反応してくれない原因はUIScrollViewのdelaysContentTouchesがtrueになっていることです。たぶん。 ですから、これをfalseにしてやればいいんですが、UITableViewは内
cell.rx.tapGesture .subscribe(onNext: { _ in // タップ時の処理 }) 目的 少し前の記事「RxDataSourcesの使い方」でDelegateとDataSourceをViewControllerから分離して実装したかったのでcellにアクションイベントを実装できると嬉しいと思い設計しました。 ちなみに今回はそれほど複雑なジェスチャーを必要としていなかったことと、今後のメンテナンスのことを考え、ライブラリを使わず独自実装しましたがRxSwiftCommunity/RxGestureという素晴らしいライブラリがあるので自前で実装せずともサクッと同じような感じで使えます。 実装 まずUIViewにtapGestureを生成し、イベントを流す関数とremoveする関数を作ります。排他制御にはobjc_sync_enterを使っています。 gestu
RxSwiftを使ってiOSのUIとデータをバインドするときに、ちょっと躓きやすいのがUITableViewとのバインディングです。少なくとも自分は躓きました。 ということで、調べたことをまとめておきます。 例として Item というクラスの配列が流れてくる items というObservableを、UITableView(tableView)とバインドすることを考えます。 パターンとしては、次の4つがあります。 パターン 1 let items: Observable<[Item]> = ... items .bind(to: tableView.rx.items(cellIdentifier: "Cell")) { row, element, cell in // row: Int …… アイテムのインデックス // element: Item …… アイテムのインスタンス // ce
日頃、なんとなく雰囲気で使ってた UITableView を正しく使えるように初心に返って調べ直しました。 UITableViewを使うときに考えること UITableViewを使うとき、主に次の3つの要件を考慮して開発すると思います。 セルの高さは同じなのか セルのレイアウトは全てAutoLayoutで組まれているのか ページングするのか これらの要件の組み合わせで rowHeight や estimatedRowHeight の値は決まり、tableView(_:heightForRowAt:) や tableView(_:estimatedHeightForRowAt:) のデリゲートメソッドを実装すべきかどうか決まると思います。じゃあ、実際にどのような場合にどのような値やデリゲートメソッドを実装するのが良いんでしょうか。 3つの要件の組み合わせで生じる8つのパターン rowHeig
列挙型で表現した UITableViewDataSource のセクションを Raw Value の代わりに配列で管理してみたときの印象を眺めてみるUITableViewUIKitSwiftUITableViewDataSource 先日に 熊谷と繪面がプログラミングコードの内から聴こえてくる声に耳を傾けて楽しむラジオ #7 で 列挙型を UITableDataSource のセクションを管理するのに使う場面を見るけれど、どういう風にするのが良いのだろう というテーマで談笑をして、その中で やっぱり Raw Value を使うよりは配列を使った方が良さそう という話でいったん落ち着きました。 自分でも、そのあとさらに思いを巡らせてみて、やっぱり配列で管理した方が理屈面ではシンプルに収まりそうに思えました。そしてそのとき実装はどんな印象になるのだろう、そう思って少しばかり試してみました。 検
table view(またはcollection view)を使うとき、多くの場合カスタムセルクラスを作ってtable viewにregisterしてからdequeueする、という決まった手順を踏むことになると思いますが、 reuseIdentifierを文字列で指定しなければならない nibかクラスかでインターフェースが異なる dequeueした時にクラスが決まっていないためキャストが必要 といった難点があります。 retuseIdentifierについてはプライベートな文字列定数を定義したり、セルのクラス名を利用したりといった工夫をすることが考えられますが、多くのケースでセルのクラスと reuseIdentifier は1対1で良いので、もっとシンプルにできないか考えて見ました。 目指す形はこうです。
About the content This talk was delivered live in March 2017 at try! Swift Tokyo. The video was recorded, produced, and transcribed by Realm, and is published here with the permission of the conference organizers. In this talk, we’ll look at how we can work with table view controllers in a more Swifty way. We’ll use generics, structs and functions to create a reusable subclass of UITableViewContro
表題通りUITableViewのHeaderに高さ可変のHeaderViewをつくります。 TableHeaderViewの中にラベルか何かを表示させていて、 その文字列をレスポンスから引っ張ってきたりして設定するために、 高さを変えなければならない。そんな人向けの記事です。 まずTableHeaderViewをつくりましょう。 当たり前ですが、xibでもコードオンリーでもいいのでHeaderViewをつくりましょう。 その際、下辺が大きさに応じて変化させることができるような制約(Constraint)をつけましょう。 下はかんたんな例。 カスタムビューの最下端にラベルのボトムとの制約をつけています。 class MyTableHeaderView: UIView { var label: UILabel! = { }() override func updateConstraints()
reuseableなUITableViewで何も考えずにcellのイベントをRxSwift,RxCocoaで取ろうとすると、cell一つひとつが再利用されるたびにRxSwiftのオブジェクトが積み重なっていきます。そのため再利用の際に適切に破棄する必要があります。 Cell側 import UIKit class MyCell: UITableViewCell { var disposeBag = DisposeBag() let button = UIButton() . . . override func prepareForReuse() { super.prepareForReuse() // 再利用時にdisposeBagに溜まっていたものを破棄 self.disposeBag = DisposeBag() } } func tableView(tableView: UITabl
あの面倒で可読性の悪いcellForRowAtIndexPath内の分岐をスッキリ・サッパリ!Shoyuというライブラリを作りましたGitHubiOSSwift iOSアプリには必須のUITableView。 幾つかのアプリ開発を経験し、UITableViewの実装をもっと簡潔に出来ないか考え続けてきました。 試行錯誤した結果、なかなかできの良いライブラリを作ることに成功しました。 yukiasai/Shoyu UITableViewを普通に実装した時の問題点 UITableViewの実装は、UITableViewDelegateとUITableViewDataSourceを実装するのが一般的です。 このデリゲートパターンはCocoaのフレームワークで多用されており、とっても優れたデザインパターンだと思っています。 ですが問題点もあります。 テーブルの構成がシンプルなうちはいいのですが、あ
「Yo.」というアプリをご存知ですか? 「Yo」というメッセージを送り合うだけのアプリですが、UIが「So Cool!」 かなり前にelocogyさんから教わりました。 Coolなアニメーション! elocogyさんから、どうやって実装しているか相談があり、 いろいろ試行錯誤してみました。 力技ですが、実装してみました。 ※まだ不完全です。 完成イメージ タップされたセルが一番上に移動するアニメーションです。 実装のポイント タップされたセルのスナップショットをとる。 スナップショットを一番上のセルまで移動させ、一定時間経過するとスナップショットを消す。 タップしたセルを一番上に入れ替え、再描画する。 サンプル 貧素なソースコードですが、ご愛嬌! まずは、動かすことに重点をおきました。(言い訳) import UIKit class ViewController: UIViewContro
Home » iOS » UITableViewセルの追加/削除と、セル高さ伸縮のアニメーションを共存させる 要は、こういうものが作りたい。 ただ tableView.reloadData() するだけだと、下画像の結果となり、うまくいかなかった。 tableView.reloadSections(sections:withRowAnimation:) を使ってもダメ。(結果は下画像) reloadSections(sections:withRowAnimation:)の場合は特に、セルオブジェクトが作り直されるようで、シームレスなアニメーションは期待できなさそう。 この辺、メソッドによる挙動の違いについては、綿密に確認していないが。。 試行錯誤の末、行き着いた実装は以下。 かいつまんで説明すると、 追加及び削除が必要なセルは insertordeleteRowsAtIndex
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く