2018/03/19 - Xamarin Mac

Weather TypingマルチOS対応も大詰め。最後にMac対応をしているのだが、なかなか難しい。どうしてもダメだったのがListViewの列の高さを動的に変える方法。ListViewの項目のうち、下半分を普段は隠しておいて、選択したときだけ全部表示する、というのを実現したい。要はランキングのアップロードボタンを隠したいってことなんだけど。

で、WindowsとAndroidではボタン等の表示非表示を切り替えるだけで問題なく動くのだが、iOSとMacはうまくいかない。いろいろ調べて、ListViewItemがクリックされたときにViewCellのForceUpdateSizeを呼ぶとiOSではうまくいった。でも同じ事をMacでやってもうまくいかない。Xamarinのソースを見てみたが、ForceUpdateSizeの実装はTODOになっていて何もやってなかった。その後、Mac側のネイティブコントロールまでいって、NSTableView.NoteHeightOfRowsWithIndexesChangedを呼び出すとか、NSTableView.ReloadDataを呼び出すとかしてもダメ。で、どうもNSTableViewDelegateのGetRowHeightで値を返せばよさそうというところまではいったのだが、XamarinがDelegateを使っているようで、ごっそり置き換えるのは困難。

というところで、Mac版はボタンを表示しっぱなしにすることに。Xamarin側で実装してくれるといいな。

あと、Mac/iOSではListViewに大量のデータを入れると表示が遅い。Windows/Androidはちょっとずつ表示してくれるけど、Mac/iOSはやってくれないっぽい。これも実装してくれるといいな。

コメントする