モノトーンの伝説日記

スプラトゥーンが大好き。

<mini> Xamarin.iOS + ReactiveUI で UITableView(Controller) の AutoLayout を有効にする。

 AutoLayout 絡みがきちんと動かなくて,sizeHint がヒントでないのでは? と思ったらその通りでした。

 AutoLayout 辛い…… AutoLayout 辛い…… モノトーンです。お久しぶりです。

 開発の記事を書くのはチョー久々になる気がします。今日は AutoLayout の話。

 ReactiveUI を使えばかなりの部分が省略できるのでとても重宝していますが,昔の名残なのか知りませんが,sizeHint がそのまま UIKit に渡されて絶対値で TableViewCell を固定してしまう問題があります。単純に,sizeHint に無理やりキャストした UITableView.AutomaticDimension を入れるだけで解決できます。

using System;
using ReactiveUI;
using UIKit;

namespace SampleProduct
{
    public partial class SampleTableViewController : ReactiveTableViewController<ViewModels.SampleViewModel>
    {
        public SampleTableViewController(IntPtr handle) : base(handle) { }

        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);

            TableView.RegisterNibForCellReuse(SampleCellView.Nib, SampleCellView.Key);
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            ViewModel = new ViewModels.SampleViewModel();

            TableView.Source = new ReactiveTableViewSource<ViewModels.RecentViewModel>(
                TableView,
                ViewModel.Samples,
                SampleCellView.Key,
                (float)UITableView.AutomaticDimension); // ←ここ
        }
    }
}

 参考は Swift での tableView:heightForRowAtIndexPath: に直接 UITableViewAutomaticDimension を渡しているところから。

stackoverflow.com

 ReactiveUI 最高