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 "ProgrammaticAutolayoutView.h"
@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]