ios - 设置自定义 UIView 的不同水平对齐方式
<p><p>创建了一个自定义 UIView 'MyLabelView' ,其中包含两个元素,1x UILabel,1x UIView 将被设置为背景颜色。<br/><br/>
<strong>MyLabelView</strong><br/>
<br/>查看:<br/>
<a href="/image/9cPBo.png" rel="noreferrer noopener nofollow"><img src="/image/9cPBo.png" alt="enter image description here"/></a>
<br/>代码:</p>
<pre><code>import UIKit
@IBDesignable
class MyLabelView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var imageView: UIView!
@IBOutlet weak var titleLabel: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
commonInit()
contentView?.prepareForInterfaceBuilder()
}
private func commonInit() {
let bundle = Bundle(for: type(of: self))
bundle.loadNibNamed(String(describing: type(of: self)), owner: self, options: nil)
addSubview(contentView)
}
</code></pre>
<p>}</p>
<p>我在两次使用 MyLabelView:<br/>- MasterViewController(带有动态原型(prototype)的 TableViewController)<br/>- DetailViewController(带有静态单元格和分组样式的 TableViewController)</p>
<p><strong>MasterViewController</strong><br/>
正确显示 MyLabelView 作为自定义 UITableViewCell 的一部分<br/><br/>View:<br/>
<a href="/image/8kC5f.png" rel="noreferrer noopener nofollow"><img src="/image/8kC5f.png" alt="enter image description here"/></a>
<br/>代码(在cellForRowAt中):</p>
<pre><code>let cell: MyTableViewCell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell") as! MyTableViewCell
cell.myLabelView.titleLabel.text = "Label"
cell.myLabelView.imageView.backgroundColor = UIColor.red
// Dynamic width to fit label texts of various sizes
var frm: CGRect = cell.myLabelView.titleLabel.frame
frm.size.width = cell.myLabelView.titleLabel.intrinsicContentSize.width
cell.myLabelView.titleLabel.frame = frm
</code></pre>
<p><br/>
<strong>DetailViewController</strong><br/>
在这里,我想渲染 MyLabelView 增加字体大小(工作)和右对齐,这样无论标签文本有多长,它总是与人字形对齐<br/><br/> View :<br/>
<a href="/image/ly3tZ.png" rel="noreferrer noopener nofollow"><img src="/image/ly3tZ.png" alt="enter image description here"/></a>
<br/>代码(在viewDidLoad中):</p>
<pre><code>myLabelView.titleLabel.text = "Label"
myLabelView.titleLabel.font = myLabelView.titleLabel.font.withSize(17)
myLabelView.imageView.backgroundColor = UIColor.red
// Dynamic width to fit label texts of various sizes
var frm: CGRect = myLabelView.titleLabel.frame
frm.size.width = myLabelView.titleLabel.intrinsicContentSize.width
myLabelView.titleLabel.frame = frm
</code></pre>
<p><strong>预期结果</strong><br/>
查看:<br/>
<a href="/image/ai6TU.png" rel="noreferrer noopener nofollow"><img src="/image/ai6TU.png" alt="enter image description here"/></a>
<br/>查看:<br/>
<a href="/image/3uAnY.png" rel="noreferrer noopener nofollow"><img src="/image/3uAnY.png" alt="enter image description here"/></a>
<br/>我尝试使用额外的外部 UIViews 作为容器并使用 AutoLayout,但不知何故它从来没有像我预期的那样工作。非常感谢您的帮助。<br/>Swift 4、iOS11
<br/><br/>
<strong><em>更新</em></strong><br/>
我试图在 IB 中设置约束,因为我无法访问单元格(使用静态单元格)。<br/><br/>内容 View :<br/>
<a href="/image/eIiCf.png" rel="noreferrer noopener nofollow"><img src="/image/eIiCf.png" alt="enter image description here"/></a>
<br/><br/>标题:<br/>
<a href="/image/Vod0r.png" rel="noreferrer noopener nofollow"><img src="/image/Vod0r.png" alt="enter image description here"/></a>
<br/><br/>MyLabelView:<br/>
<a href="/image/bpvCF.png" rel="noreferrer noopener nofollow"><img src="/image/bpvCF.png" alt="enter image description here"/></a> </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>只需在 UITableViewCell 子类中添加一个函数,并在需要设置右侧旁边的 View 时调用它:</p>
<pre><code>func setTrailingAnchorForView() {
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
contentView.trailingAnchor.constraint(equalTo: imageView.leadingAnchor, constant: 0).isActive = true
}
</code></pre>
<p>这样调用它:</p>
<pre><code>cell.setTrailingAnchorForView()
</code></pre></p>
<p style="font-size: 20px;">关于ios - 设置自定义 UIView 的不同水平对齐方式,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/55495384/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/55495384/
</a>
</p>
页:
[1]