代码之家  ›  专栏  ›  技术社区  ›  Dominik Roszkowski

iOS UIScrollView可在Xamarin.iOS中第二次打开视图时滚动

  •  0
  • Dominik Roszkowski  · 技术社区  · 7 年前

    FluentLayout 和MvvmCross 6.0.1。

    View (controller)
     - UIScrollView
       - UIView
          - UIView,
          - UIView/UILabel etc.
          - UIView/UILabel etc.
          - ...
    

    控制器位于MvxBaseViewController内部,即控制器的结构如下:

    - DashBoard (MvxTabBarViewController, WrapInNavigationController=true)
      - Tab1 (MvxBaseViewController)
      - Tab2 (MvxBaseViewController)
      - Tab3 (MvxBaseViewController)
        - The problematic view (MvxBaseViewController)
    

    我在跟踪 this guide 在设置以下约束时:

    var innerView = new UIView();
    innerView.AddSubview(view1);
    innerView.AddSubview(view2);
    innerView.AddSubview(view3);
    
    innerView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
    innerView.AddConstraints(
        view1.AtTopOf(innerView).Plus(21.0f),
        view1.WithSameCenterX(innerView),
        view1.WithSameWidth(innerView).WithMultiplier(0.8f),
        view1.Height().EqualTo(44f),
        view2.Below(view1).Plus(10.0f),
        view2.WithSameCenterX(innerView),
        view2.WithSameWidth(innerView).WithMultiplier(0.9f),
        view2.Height().EqualTo(16.0f),
        view3.Below(view2).Plus(21.0f),
        view3.WithSameCenterX(innerView),
        view3.WithSameWidth(innerView).WithMultiplier(0.9f),
        view3.Height().EqualTo(40.0f),
    );
    
    var scrollView = new UIScrollView();
    scrollView.ShowsHorizontalScrollIndicator = false;
    scrollView.AddSubview(innerView);
    
    scrollView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
    scrollView.AddConstraints(
        innerView.AtTopOf(scrollView, 0),
        innerView.AtBottomOf(scrollView, 0),
        innerView.AtLeadingOf(scrollView, 0),
        innerView.AtTrailingOf(scrollView, 0)
    );
    
    //scrollView.DirectionalLockEnabled = true;
    View.AddSubview(scrollView);
    
    View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
    View.AddConstraints(
        //scrollView.WithSameWidth(View),
        //scrollView.WithSameHeight(View),
        innerView.WithSameWidth(View),
        innerView.WithSameHeight(View).SetPriority(250),
        scrollView.AtTopOf(View, 0),
        scrollView.AtBottomOf(View, 0),
        scrollView.AtLeadingOf(View, 0),
        scrollView.AtTrailingOf(View, 0)
    );
    

    我怀疑问题与约束有关,但我无法找出问题所在。你有什么办法解决这个问题吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Dominik Roszkowski    7 年前

    所以我花了一些时间在这个话题上,找不到合适的方法来限制我的观点。我尝试在xib中实现这个布局,但是在代码中重新实现自动生成的约束没有帮助。

    内视图 滚动视图 . 然后在 ViewDidAppear() ContentSize 垂直方向的滚动视图。

    scrollView = new UIScrollView();
    
    scrollView.AddSubviews(view1,
                           view2,
                           view3);
    scrollView.ShowsHorizontalScrollIndicator = false;
    scrollView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
    
    scrollView.AddConstraints(
        view1.AtTopOf(scrollView).Plus(21.0f),
        view1.WithSameCenterX(scrollView),
        view1.WithSameWidth(scrollView).WithMultiplier(0.8f),
        view1.Height().EqualTo(44f),
    
        view2.Below(view1).Plus(10.0f),
        view2.WithSameCenterX(scrollView),
        view2.WithSameWidth(scrollView).WithMultiplier(0.9f),
        view2.Height().EqualTo(16.0f),
    
        view3.Below(view2).Plus(21.0f),
        view3.WithSameCenterX(scrollView),
        view3.WithSameWidth(scrollView).WithMultiplier(0.9f),
        view3.Height().EqualTo(40.0f)
    );
    
    View.AddSubview(scrollView);
    View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
    
    View.AddConstraints(
        scrollView.AtTopOf(View, 0),
        scrollView.AtBottomOf(View, 0),
        scrollView.AtLeadingOf(View, 0),
        scrollView.AtTrailingOf(View, 0),
        scrollView.WithSameCenterX(View),
        scrollView.WithSameCenterY(View)
    );
    

    在视图中出现:

    scrollView.ContentSize = new CGSize(View.Bounds.Width, scrollView.Bounds.Height + 300);