UIScrollView 滚动不工作 Xamarin IOS
Posted
技术标签:
【中文标题】UIScrollView 滚动不工作 Xamarin IOS【英文标题】:UIScrollView Scroll Not working Xamarin IOS 【发布时间】:2014-07-18 09:30:50 【问题描述】:创建添加到UIViewController
View
的滚动视图
UIScroll scroll_View;
scroll_View = new UIScrollView
BackgroundColor = UIColor.Black,
Frame = View.Frame,
ContentSize = new SizeF(320,720),
;
View.addSubView(scroll_View);// Added to Regisration ViewController
// 创建文本字段
firstName = new UITextField
Placeholder = "Enter firstName",
BorderStyle = UITextBorderStyle.None,
VerticalAlignment = UIControlContentVerticalAlignment.Center,
AutocorrectionType = UITextAutocorrectionType.No,
AutocapitalizationType = UITextAutocapitalizationType.None,
ClearButtonMode = UITextFieldViewMode.WhileEditing,
Background = TextFieldBackground,
LeftView = new UIView (new RectangleF (0, 0,8, 8)),
LeftViewMode = UITextFieldViewMode.Always,
ReturnKeyType = UIReturnKeyType.Next,
ShouldReturn = delegate
lastName.BecomeFirstResponder ();
return true;
;
// 像这样创建了 9 个文本字段和一个提交按钮。添加到 ScrollView
框架文本字段。
firstName.Frame = new RectangleF(80, 20, 200, 41);
lastName.Frame = new RectangleF(80, 70, 200, 41);
middle.Frame = new RectangleF(80, 120, 200, 41);
email.Frame = new RectangleF(80, 127, 200, 41);
password.Frame = new RectangleF(80, 220, 200, 41);
conformPassword.Frame = new RectangleF(80, 270, 200, 41);
phoneNumber.Frame = new RectangleF(80, 320, 200, 41);
description.Frame = new RectangleF(80, 370, 200, 41);
other.Frame = new RectangleF(80, 420, 200, 41);
buttonSubmit.Frame = new RectangleF(80, 470, 420, 41);
将文本字段添加到 ScrollView
scroll_View.addSubView(firstName);
scroll_View.addSubView(lastName);
scroll_View.addSubView(middleName);
scroll_View.addSubView(email);
scroll_View.addSubView(Password);
scroll_View.addSubView(conformaPassword);
scroll_View.addSubView(phoneNumber);
scroll_View.addSubView(description);
scroll_View.addSubView(other);
scroll_View.addSubView(buttonSubmit);
添加了滚动视图 UIViewController 视图。
View.AddSubview (scroll_View);
当滚动滚动效果不起作用时。 Xamarin ios。
【问题讨论】:
在真机上试一试,我在模拟器中使用 UIDatePicker 时遇到了同样的问题,但在真机上它会滚动。 【参考方案1】:public override void ViewDidLoad ()
base.ViewDidLoad ();
float h = 50.0f;
float w = 50.0f;
float padding = 10.0f;
int n = 25;
_scrollView = new UIScrollView
Frame = new RectangleF (0, 0, View.Frame.Width, h + 2 * padding),
ContentSize = new SizeF ((w + padding) * n, h),
BackgroundColor = UIColor.DarkGray,
AutoresizingMask = UIViewAutoresizing.FlexibleWidth
;
for (int i=0; i<n; i++)
var button = UIButton.FromType (UIButtonType.RoundedRect);
button.SetTitle (i.ToString (), UIControlState.Normal);
button.Frame = new RectangleF (padding * (i + 1) + (i * w), padding, w, h);
_scrollView.AddSubview (button);
_buttons.Add (button);
View.AddSubview (_scrollView);
【讨论】:
【参考方案2】:尝试在 UIScrollView 中使用“ContentSize”属性。
如果要启用“UIScrollView 上的水平滚动”,需要增加contentsize 的宽度。
如果要启用“UIScrollView 上的垂直滚动”,需要增加 contentsize 的高度。
UIScrollView *scrollView =[[UIScrollView alloc]initWithFrame:CGRectMake(0, 40, 500, 300)]; scrollView.contentSize=CGSizeMake(1500, 200); //水平滚动
UIScrollView *scrollView =[[UIScrollView alloc]initWithFrame:CGRectMake(0, 40, 500, 300)]; scrollView.contentSize=CGSizeMake(200, 1500); //垂直滚动
【讨论】:
【参考方案3】:这似乎不是一个真正的答案,但对于未来的参考:这些情况下的问题主要是 ContentSize 等于或小于 ScrollView 的框架。因此 ScrollView 不知道需要滚动。
在您的情况下,您应该验证 320x720 的 ContentSize 是否大于您分配给 ScrollView Frame 的 View.Frame...
【讨论】:
【参考方案4】:public class FirstTab : UIViewController
private UIView content1;
private UIView content2;
private UIView content3;
private UIView containerView;
private UIScrollView scrollView;
CoreGraphics.CGSize contentViewSize;
public FirstTab()
content1 = new UIView();
content2 = new UIView();
content3 = new UIView();
containerView = new UIView();
scrollView = new UIScrollView();
contentViewSize = new CoreGraphics.CGSize(View.Frame.Width, View.Frame.Height + 800);
public override void ViewWillLayoutSubviews()
base.ViewWillLayoutSubviews();
scrollView.ContentSize = contentViewSize;
public override void ViewDidLoad()
base.ViewDidLoad();
content1.BackgroundColor = UIColor.Red;
content2.BackgroundColor = UIColor.Black;
content3.BackgroundColor = UIColor.Brown;
Constraint();
private void Constraint()
containerView.AddSubviews(content1, content2, content3);
containerView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
containerView.AddConstraints(
content1.Width().EqualTo(300),
content1.Height().EqualTo(300),
content1.AtTopOf(containerView).Plus(20),
content1.WithSameCenterX(containerView),
content2.Width().EqualTo(300),
content2.Height().EqualTo(300),
content2.Below(content1).Plus(20),
content2.WithSameCenterX(containerView),
content3.Width().EqualTo(300),
content3.Height().EqualTo(300),
content3.Below(content2).Plus(20),
content3.WithSameCenterX(containerView)
);
scrollView.AddSubviews(containerView);
scrollView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
scrollView.AddConstraints(
containerView.WithSameHeight(scrollView).Plus(300),
containerView.WithSameWidth(scrollView)
);
View.AddSubviews(scrollView);
View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
View.AddConstraints(
scrollView.WithSameWidth(View),
scrollView.WithSameHeight(View).Plus(400)
);
当您将 ScrollView.ContentSize 放入 ViewWillLayoutSubview() 方法时,UIScrollView 将起作用。
我花了很长时间才找到这个用于 UIScrollView 的简单技巧。我使用 Cirrious.FluentLayout 进行自动布局。
【讨论】:
我无法在 ViewDidLoad 中设置 ContentSize,但在 ViewWillLayoutSubview 中它起作用了。谢谢你,你拯救了我的一天:)【参考方案5】:在这种情况下,您需要更好地使用UITableView
而不是UIScrollView
。
【讨论】:
以上是关于UIScrollView 滚动不工作 Xamarin IOS的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 无法正常工作(它返回顶部并且不显示任何滚动条