如何使用FluentLayout设置视图高度

德雷克

我在Xamarin.iOS项目中使用FluentLayout我创建了一个视图:

public class SignInView : UIView
{
    private const int headerSpacing = 20;
    private const int textFieldSpacing = 10;
    private const int textFieldButtonSpacing = 15;
    private const int buttonSpacing = 10;
    private const int textFieldHeight = 50;

    public SignInView()
    {
        ConstructView();
    }

    private void ConstructView()
    {
        var signInLabel = new UILabel() { Text = "sign in" };
        var usernameTextField = new UITextField() { Placeholder = "enter username" };
        var passwordTextField = new UITextField() { Placeholder = "enter password" };
        var signInButton = new UIButton();
        var createAccountButton = new UIButton();

        signInButton.SetTitle("sign in", UIControlState.Normal);
        createAccountButton.SetTitle("create account", UIControlState.Normal);

        AddSubviews(signInLabel, usernameTextField, passwordTextField, signInButton, createAccountButton);

        this.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

        this.AddConstraints(
            signInLabel.WithSameTop(this),
            signInLabel.WithSameCenterX(this),

            usernameTextField.Below(signInLabel, headerSpacing),
            usernameTextField.WithSameWidth(this),
            usernameTextField.Height().GreaterThanOrEqualTo(textFieldHeight),

            passwordTextField.Below(usernameTextField, textFieldSpacing),
            passwordTextField.WithSameWidth(this),
            passwordTextField.Height().GreaterThanOrEqualTo(textFieldHeight),

            signInButton.Below(passwordTextField, textFieldButtonSpacing),
            signInButton.WithSameWidth(this),

            createAccountButton.Below(signInButton, buttonSpacing),
            createAccountButton.WithSameWidth(this)
        );

        BackgroundColor = UIColor.Red;
    }
}

当我放置SignInView在视图中时,我可以正确看到所有内容,但是背景不是红色,因为高度为零,并且由于相同的原因,没有可单击的内容。有没有办法将高度设置SignInView为的底部createAccountButton

顺便问一下,该怎么SubviewsDoNotTranslateAutoresizingMaskIntoConstraints办?我总是需要它,以便约束起作用,但不知道它到底能做什么。

德雷克

我想出了一个把戏。我子类化,UIButton并放置一个事件处理程序以通知约束更新的时间,以便SignInView可以将其约束更新为适当的高度。

public class ConstraintsButton : UIButton
{
    public event EventHandler ConstraintsUpdated;

    public override void UpdateConstraints()
    {
        base.UpdateConstraints();
        
        ConstraintsUpdated?.Invoke(null, EventArgs.Empty);
    }
}

public class SignInView : UIView
{
    private const int headerSpacing = 20;
    private const int textFieldSpacing = 10;
    private const int textFieldButtonSpacing = 15;
    private const int buttonSpacing = 10;
    private const int textFieldHeight = 50;
    private const int buttonHeight = 50;

    private ConstraintsButton _createAccountButton;
    private FluentLayout _heightConstraint;

    public SignInView()
    {
        ConstructView();
    }

    private void ConstructView()
    {
        var signInLabel = new UILabel() { Text = "sign in" };
        var usernameTextField = new UITextField() { Placeholder = "enter username" };
        var passwordTextField = new UITextField() { Placeholder = "enter password" };
        var signInButton = new UIButton();

        _createAccountButton = new ConstraintsButton();
        _createAccountButton.ConstraintsUpdated += CreateAccountButton_ConstraintsUpdated;

        signInButton.SetTitle("sign in", UIControlState.Normal);
        _createAccountButton.SetTitle("create account", UIControlState.Normal);

        AddSubviews(signInLabel, usernameTextField, passwordTextField, signInButton, _createAccountButton);

        this.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

        this.AddConstraints(
            signInLabel.WithSameTop(this),
            signInLabel.WithSameCenterX(this),

            usernameTextField.Below(signInLabel, headerSpacing),
            usernameTextField.WithSameWidth(this),
            usernameTextField.Height().GreaterThanOrEqualTo(textFieldHeight),

            passwordTextField.Below(usernameTextField, textFieldSpacing),
            passwordTextField.WithSameWidth(this),
            passwordTextField.Height().GreaterThanOrEqualTo(textFieldHeight),

            signInButton.Below(passwordTextField, textFieldButtonSpacing),
            signInButton.WithSameWidth(this),
            signInButton.Height().EqualTo(buttonHeight),

            _createAccountButton.Below(signInButton, buttonSpacing),
            _createAccountButton.WithSameWidth(this),
            _createAccountButton.Height().EqualTo(buttonHeight)
        );

        BackgroundColor = UIColor.Red;
    }

    private void CreateAccountButton_ConstraintsUpdated(object sender, EventArgs e)
    {
        if (_heightConstraint != null)
        {
            this.RemoveConstraints(_heightConstraint);
        }

        _heightConstraint = this.Height().EqualTo(_createAccountButton.Frame.Bottom);

        this.AddConstraints(_heightConstraint);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 mvvmcross fluentLayout 修改约束

来自分类Dev

如何以编程方式设置视图的高度?

来自分类Dev

如何防止XIB设置视图的高度?

来自分类Dev

如何使用%设置溢出高度?

来自分类Dev

如何将视图高度设置为等于其宽度

来自分类Dev

如何在堆叠视图中设置容器的高度?

来自分类Dev

如何设置一半屏幕高度的视图?

来自分类Dev

如何设置相对于超级视图高度的topAnchor约束

来自分类Dev

如何快速设置集合视图单元格的动态高度?

来自分类Dev

如何以编程方式为视图设置特定的宽度/高度?

来自分类Dev

如何基于android设备动态设置视图高度?

来自分类Dev

如何在列表视图中设置固定图像高度100%

来自分类Dev

如何为展开的视图设置动态宽度和高度(按钮)

来自分类Dev

如何使用for循环设置视图?

来自分类Dev

如何使用jQuery设置嵌套div的高度?

来自分类Dev

如何使用CSS设置最小高度

来自分类Dev

如何使用WebView动态设置ListView的高度

来自分类Dev

如何将UICollectionViewCell高度设置为视图(屏幕)高度的90%?

来自分类Dev

如何设置集合视图的动态高度,而不是“视图”的“单元格”?

来自分类Dev

将列表视图高度设置为fill_parent后如何显示其他视图

来自分类Dev

如何使用onDraw指定自定义视图的高度/宽度?

来自分类Dev

如何设置<select>的高度

来自分类Dev

如何使用 SharedPreference 为视图设置颜色?

来自分类Dev

如何在XCode 7的情节提要中将视图高度设置为屏幕高度的百分比

来自分类Dev

Android:通过ViewTreeObserver设置视图高度

来自分类Dev

Android根据宽度设置图像视图高度

来自分类Dev

如何获取特定视图的高度?

来自分类常见问题

如何使用自动布局设置tableHeaderView(UITableView)的高度?

来自分类Dev

如何使用动态标题div设置内容区域div的高度

Related 相关文章

  1. 1

    如何使用 mvvmcross fluentLayout 修改约束

  2. 2

    如何以编程方式设置视图的高度?

  3. 3

    如何防止XIB设置视图的高度?

  4. 4

    如何使用%设置溢出高度?

  5. 5

    如何将视图高度设置为等于其宽度

  6. 6

    如何在堆叠视图中设置容器的高度?

  7. 7

    如何设置一半屏幕高度的视图?

  8. 8

    如何设置相对于超级视图高度的topAnchor约束

  9. 9

    如何快速设置集合视图单元格的动态高度?

  10. 10

    如何以编程方式为视图设置特定的宽度/高度?

  11. 11

    如何基于android设备动态设置视图高度?

  12. 12

    如何在列表视图中设置固定图像高度100%

  13. 13

    如何为展开的视图设置动态宽度和高度(按钮)

  14. 14

    如何使用for循环设置视图?

  15. 15

    如何使用jQuery设置嵌套div的高度?

  16. 16

    如何使用CSS设置最小高度

  17. 17

    如何使用WebView动态设置ListView的高度

  18. 18

    如何将UICollectionViewCell高度设置为视图(屏幕)高度的90%?

  19. 19

    如何设置集合视图的动态高度,而不是“视图”的“单元格”?

  20. 20

    将列表视图高度设置为fill_parent后如何显示其他视图

  21. 21

    如何使用onDraw指定自定义视图的高度/宽度?

  22. 22

    如何设置<select>的高度

  23. 23

    如何使用 SharedPreference 为视图设置颜色?

  24. 24

    如何在XCode 7的情节提要中将视图高度设置为屏幕高度的百分比

  25. 25

    Android:通过ViewTreeObserver设置视图高度

  26. 26

    Android根据宽度设置图像视图高度

  27. 27

    如何获取特定视图的高度?

  28. 28

    如何使用自动布局设置tableHeaderView(UITableView)的高度?

  29. 29

    如何使用动态标题div设置内容区域div的高度

热门标签

归档