本文介绍了使用 Crillous.FluentLayouts.Touch 在 UIScrollView 中自动布局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须在 scrollView 中做一个带有自动布局的 ViewController,但这里有几个问题:

I've to do a ViewController with autolayouts in scrollView, but here is few problems:

public SomeVC() : UIViewController
    {
        _mainScrollView = new UIScrollView {
            ShowsHorizontalScrollIndicator = false,
            ShowsVerticalScrollIndicator = true,
            BackgroundColor = UIColor.Clear,
            ScrollEnabled = true,
            AutoresizingMask = UIViewAutoresizing.FlexibleHeight,
            TranslatesAutoresizingMaskIntoConstraints = true
        };

        _userDataTableView = new UITableView(CGRect.Empty, UITableViewStyle.Grouped);
        _userDataTableView.LayoutIfNeeded();

        _saveButton = new UIButton();

        _menuTableView = new UITableView(CGRect.Empty, UITableViewStyle.Grouped);
        _menuTableView.LayoutIfNeeded();

        _logoutButton = new UIButton();
    }

    public override void LoadView()
    {
        base.LoadView();
        View = _mainScrollView;
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        Add(_userDataTableView);
        Add(_saveButton);
        Add(_menuTableView);
        Add(_logoutButton);

        _mainScrollView.AddConstraints(
            _userDataTableView.AtTopOf(View),
            _userDataTableView.AtLeftOf(View),
            _userDataTableView.AtRightOf(View),
            _userDataTableView.Height().EqualTo(_userDataTableView.ContentSize.Height),

            _saveButton.Below(_userDataTableView, 20),
            _saveButton.AtLeftOf(_mainScrollView, 10),
            _saveButton.AtRightOf(_mainScrollView, 10),
            _saveButton.Height().EqualTo(44),

            _menuTableView.Below(_saveButton, 20),
            _menuTableView.AtLeftOf(_mainScrollView),
            _menuTableView.AtRightOf(_mainScrollView),
            _menuTableView.Height().EqualTo(_menuTableView.ContentSize.Height),

            _logoutButton.Below(_menuTableView, 20),
            _logoutButton.AtLeftOf(_mainScrollView, 10),
            _logoutButton.AtRightOf(_mainScrollView, 10),
            _logoutButton.Height().EqualTo(44)
        );
        _mainScrollView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
    }

事实上,它可以工作,但内容宽度大约是屏幕宽度的一半,并且滚动不起作用.如何让它工作?

In fact, it works, but contents width is about half of screen width, and scrolling not working. How to get it works?

据我所知,问题是 - _mainScrollView.ContentSize,但是在使用自动布局时,我应该如何以及在哪里设置它?

As far as I understand, the problem is - _mainScrollView.ContentSize, but how and where should I set it, when using autolayouts?

推荐答案

找到的解决方案:首先:

Solution found:Firstly:

        _userDataTableView.AtLeftOf(View),
        _userDataTableView.AtRightOf(View),

无效,我们应该使用:

is not valid, instead of this, we should use:

        _userDataTableView.AtLeftOf(View),
        _userDataTableView.WithSameWidth(View),

如果我们想要保证金,我们只需添加

if we want margin, we just add

        _userDataTableView.WithSameWidth(View).Minus(MARGIN)

我们必须做的最后一件事:

And the last thing we have to do:

        _logoutButton.Height().EqualTo(44),
        _logoutButton.Bottom().EqualTo().BottomOf(_mainScrollView).Plus(10)

最后一行非常重要.它说要滚动查看正确的内容大小.

last line is very important. It says to scrollView right content size.

这篇关于使用 Crillous.FluentLayouts.Touch 在 UIScrollView 中自动布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 11:26