簡単な質問:タイトルをテキストと一緒にスクロールするつもりですか?このソリューションでは、これが私の解釈であるため、これを実行しました。必要に応じて、タイトルがスクロールしないように調整します。XCodeでこの階層を作成して、サンプルを再作成しました
- UIView(ビューコントローラのメインビュー)
- UIView(contentView)
- UILabel(contentTitleLbl)
- UILabel(contentLbl)
- 行=100
- フレーム=(20,43,160,190)
- Text = "Lorem ipsum ..."(長い段落)
- UIScrollView(scrollView)
すべてのコンポーネントの寸法を確認できるように、すべてのアイテムの背景色を異なる値に設定しました。
まず、ラベルの自動サイズ変更がすべてオフになっていることを確認する必要がありました。これは、XCodeで、またはプログラムで行うことができます。
contentLbl.AutoresizingMask = UIViewAutoresizing.None;
contentTitleLbl.AutoresizingMask = UIViewAutoresizing.None;
Via XCodeのcontentView
内部に配置したいのですが、メインの下に兄弟として配置されているようです。だから私たちはそれを中に置くために親を再設定しますscrollView
View
contentView
scrollView
scrollView.AddSubview( contentView );
次に、タイトルをと同じ幅scrollView
にし、原点に配置し、XCodeで設計された高さを残します
var f = contentTitleLbl.Frame;
f.X = 0;
f.Y = 0;
f.Width = scrollView.Frame.Width;
contentTitleLbl.Frame = f;
UILabel
次に、最初の大きな問題は、コンテンツに動的に合わせてサイズを変更することです。SizeToFit
ラベルのサイズを1行のテキストに変更します(または、少なくとも私にとってはそうしました)。本当に必要なのは、MonoTouchにUIView.StringSizeとして表示されるものNSString.sizeWithFont
です。これらの一部は1行のテキストのサイズを返すため、注意してください。ここでは、幅をスクロールビューの幅に制限しましたが、を使用して高さを制限しないようにしました。float.MaxValue
SizeF sz = this.View.StringSize(
contentLbl.Text,
contentLbl.Font,
new SizeF( scrollView.Frame.Width, float.MaxValue),
UILineBreakMode.WordWrap );
次に、ラベルのサイズを変更して、タイトルのすぐ下に配置します。
f = contentLbl.Frame;
f.X = 0;
f.Y = contentTitleLbl.Frame.Bottom; // nudge the contentLbl right up against the title
f.Width = sz.Width; // size matches the measured values from above
f.Height = sz.Height;
contentLbl.Frame = f;
次に、のサイズを調整してcontentView
、タイトルとコンテンツを保持します。このビューは、スクロールビューの原点に配置されます。サイズは上記のコードによって動的に決定されます。コンテンツ全体がレンダリングされたことがわかるように、下部に小さなマージンを追加しました
f = contentView.Frame;
f.X = 0;
f.Y = 0;
f.Width = scrollView.Frame.Width;
f.Height = contentLbl.Frame.Bottom + 20;
contentView.Frame = f;
次にContentSize
、スクロールビューのをcontentViewのサイズに設定します。サイズが スクロールビューのサイズよりも大きい場合( Lorem Ipsumテキストの場合のように)、スクロールが表示されます。
scrollView.ContentSize = contentView.Frame.Size;
乾杯。
[編集:「幅」と「高さ」のタイプミスを修正]
[編集:最も単純なスクロールビュー]
これが私が思いついた最も単純なスクロールビューです。赤い領域を上下にドラッグすると、スクロールバーが表示されます。一番下に到達すると、スクロールビューの緑色の背景が表示されます。
var v = new UIView( new RectangleF(0,0,200,1000));
v.BackgroundColor = UIColor.Red;
var sv = new UIScrollView( new RectangleF(20,20,200,300));
sv.BackgroundColor = UIColor.Green;
sv.ContentSize = v.Frame.Size;
View.AddSubview(sv);
sv.AddSubview(v);
[編集:さらにシンプルなスクロールビュー]
XCodeでスクロールビューを作成し、背景色とコンテンツサイズをスクロールビューのサイズよりも大きく設定するだけです。青いスクロールビューをドラッグすると、スクロールバーが表示されます。
designerScrollView.BackgroundColor = UIColor.Blue;
designerScrollView.ContentSize = new SizeF(1000,1000);