菜鸟教程小白 发表于 2022-12-12 15:21:19

ios - 以编程方式使用自动布局实现带有 subview 的 uiview 子类


                                            <p><p>我的需求很笼统,我必须实现一个 UIView 子类,它将一个 UIImageView 分组,在屏幕上以 x 为中心,距离顶部 20 点,以及一个带有描述的 UILabel。<br/>
使用界面生成器我没有问题,但由于我需要以编程方式制作它,所以我关注技术和最佳实践。
到目前为止,我想出了这段代码,开始只可视化图像。尽管它非常基本,但我无法理解为什么 View 没有派生(如您从屏幕截图中看到的那样)正确的框架,该框架应该在 ImageView 的所有边缘上“偏移”20 个点。</p >

<p>这是我的子类:</p>

<p><strong>标题</strong> </p>

<pre><code>@interface ProgrammaticAutolayoutView : UIView

@property (nonatomic, strong) UIImageView *imageView;

@end
</code></pre>

<p><strong>实现</strong></p>

<pre><code>#import &#34;ProgrammaticAutolayoutView.h&#34;

@implementation ProgrammaticAutolayoutView{

    BOOL _didUpdateConstraints;
}

- (instancetype)init
{
    return ;;
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = ;
    if (self) {

      _didUpdateConstraints = NO;

      _imageView = ;
      ;

      ;
    }
    return self;
}

- (void) updateConstraints{

    if(!_didUpdateConstraints){
      ;
    }

    ;
}

- (void) setupConstraints{

    ];

    ];

    ];

    ];

    ];

    ];

    _didUpdateConstraints = YES;
}

@end
</code></pre>

<p>这是我用来实例化和绘制这个 uiview 子类的代码片段:</p>

<pre><code>    - (void)viewDidLoad {
    ;

    ProgrammaticAutolayoutView *test = [ init];
    ;
    test.imageView.image = ;
    test.backgroundColor = ;

    ;

    ];

    ];

    ;
    ;
}
</code></pre>

<p>我期待看到 subview 与 uiimageview 的所有边缘偏移 20 点,但结果完全不同,我没有任何调试器日志或不一致之处,显然我必须遗漏一些非常基本的东西,但所以到目前为止我不明白什么。</p>

<p> <img src="/image/dv1tf.png" alt="wrong offset on image view"/> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>常量描述 X 和 Y 偏移量。你的 4 个约束说:</p>

<ul>
<li>将 imageView 的顶部放置在红色 View 下方 (+Y 20) 20 点处</li>
<li>将 imageView 的底部放置在红色 View 下方 (+Y 20) 20 点处</li>
<li>将 imageView 的前沿放置在红色 View 的右侧 (+X 20) 20 点</li>
<li>将 imageView 的尾部边缘放置在红色 View 的右侧 (+X 20) 20 点</li>
</ul>

<p>这就是你的照片所显示的。</p>

<p>要使红色框框成为图像,您可以将两个常量设为负数:</p>

<pre><code>];

];

];

];
</code></pre>

<p><strong>或</strong>切换底部和尾部约束中项目的顺序:</p>

<pre><code>];

];

];

];
</code></pre>

<hr/>

<p>新的建议约束说:</p>

<ul>
<li>将 imageView 的底部放在红色 View 上方 20 点 (-Y 20)</li>
<li>将 imageView 的后沿放置在红色 View 的左侧 (-X 20) 20 个点</li>
</ul>

<p><strong>或</strong></p>

<ul>
<li>将红色 View 的底部放置在 imageView 下方 (+Y 20) 20 点处</li>
<li>将红色 View 的尾部边缘放置在 imageView 的右侧 (+X 20) 处 20 点</li>
</ul></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 以编程方式使用自动布局实现带有 subview 的 uiview 子类,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30437029/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30437029/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 以编程方式使用自动布局实现带有 subview 的 uiview 子类