快速提问:您是否打算让标题与您的文本一起滚动?在这个解决方案中,我已经这样做了,因为这是我的解释。如果您愿意,我会调整它,以使标题不滚动。我通过在 XCode 中创建此层次结构重新创建了您的示例
- UIView(视图控制器的主视图)
- 界面视图(内容视图)
- UILabel (contentTitleLbl)
- UILabel (contentLbl)
- 行数 = 100
- 帧 = (20,43,160,190)
- Text = "Lorem ipsum..."(长段)
- UIScrollView(滚动视图)
我将所有项目的背景颜色设置为不同的值,以便我可以看到所有组件的尺寸。
首先,我需要确保标签的所有自动调整大小都已关闭。您可以在 XCode 中或以编程方式执行此操作:
contentLbl.AutoresizingMask = UIViewAutoresizing.None;
contentTitleLbl.AutoresizingMask = UIViewAutoresizing.None;
我更喜欢将via XCode 放在contentView
里面scrollView
,但看起来你将它们作为兄弟姐妹放在 main 下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;
然后是第一个主要问题:调整 a 的大小UILabel
以动态适应您的内容。SizeToFit
将标签调整为单行文本(或至少为我做了)。您真正想要的是在 MonoTouchNSString.sizeWithFont
中显示为 UIView.StringSize。请小心,因为其中一些会返回单行文本的大小。在这里,我将宽度限制为滚动视图的宽度,但使用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);