UIScrollView 滚动不工作 Xamarin IOS

Posted

技术标签:

【中文标题】UIScrollView 滚动不工作 Xamarin IOS【英文标题】:UIScrollView Scroll Not working Xamarin IOS 【发布时间】:2014-07-18 09:30:50 【问题描述】:

创建添加到UIViewControllerView的滚动视图

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 不工作

自动滚动时 UIScrollView 触摸不起作用

UIScrollView 无法正常工作(它返回顶部并且不显示任何滚动条

UIScrollView在iOS11中不滚动

UIScrollView 不使用 RubyMotion 滚动

UIScrollView 在键盘关闭时停止滚动