使用 C# 在 iOS 上与 UIScrollView 相关的 UISwitch 的奇怪故障

Posted

技术标签:

【中文标题】使用 C# 在 iOS 上与 UIScrollView 相关的 UISwitch 的奇怪故障【英文标题】:Weird glitch of UISwitch related to the UIScrollView on iOS with C# 【发布时间】:2018-11-01 15:01:23 【问题描述】:

我有 ViewContoller,它的视图层次结构如下(Cirrious.FluentLayout 库,但应该可以理解):

        _scrollView = new UIScrollView()
        
            ShowsVerticalScrollIndicator = false
        ;
        View.Add(_scrollView);

        _contentView = new UIView();
        _scrollView.Add(_contentView);


        View.AddConstraints(
            _scrollView.Below(VueNavBar),
            _scrollView.AtLeftOf(View),
            _scrollView.AtRightOf(View),
            _scrollView.AtBottomOf(View)
        );

        _scrollView.AddConstraints(_contentView.SameFrameAs(_scrollView));

然后我按如下方式添加 UISwitch:

var switch = new UISwitch();
_contentView.Add(switch);

设置约束后(我尝试了很多组约束,很多肯定没有歧义)ios给我呈现如下:

真的很奇怪,但是切换后会变成:

也许有人知道为什么会发生这种情况?

P.S.:我已经设法通过以相同方式添加滚动视图来破坏其他页面上的开关,但是它们以不同的方式被破坏(其他类型的故障)。

【问题讨论】:

【参考方案1】:

我试了下面的代码,开关显示正常。

您无需定义UISwitch 的宽度和高度。

public override void ViewDidLoad ()
        
            base.ViewDidLoad ();
            // Perform any additional setup after loading the view, typically from a nib.

            _scrollView = new UIScrollView()
            
                ShowsVerticalScrollIndicator = false,
                BackgroundColor = UIColor.Blue
            ;
            View.Add(_scrollView);

            this.View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

            View.AddConstraints(
                _scrollView.AtTopOf(View,20),
                _scrollView.AtLeftOf(View,20),
                _scrollView.AtRightOf(View, 20),
                _scrollView.AtBottomOf(View, 20)
            );

            _contentView = new UIView();
            _contentView.BackgroundColor = UIColor.Orange;
            _scrollView.Add(_contentView);

            _scrollView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

            _scrollView.AddConstraints(
             _contentView.WithSameTop(_scrollView),
             _contentView.WithSameLeft(_scrollView),
             _contentView.WithSameWidth(_scrollView),
              _contentView.WithSameHeight(_scrollView)
            );

            var switch1 = new UISwitch();
            _contentView.Add(switch1);
            _contentView.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
            _contentView.AddConstraints(
                switch1.AtTopOf(_contentView, 80),
                switch1.AtLeftOf(_contentView, 20)
            );

        

【讨论】:

感谢回答,但我没有设置UISwitch的宽高。

以上是关于使用 C# 在 iOS 上与 UIScrollView 相关的 UISwitch 的奇怪故障的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Analytics 在 iOS 14.5 上与 ATT 的合规性

在 iOS 6 及更高版本上与 YouTube 和 Twitter 共享视频文件

在 iOS 上与 iTunes 共享文件

如何在 iOS 7 上与设备旋转一起制作动画

解决Lightmap在PC上与ios和Android上表现不同的问题

在 SQlite 上与 Objective-C 一起使用的最佳 ORM 是啥? [关闭]