菜鸟教程小白 发表于 2022-12-11 22:39:58

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: &#34;MyTableViewCell&#34;) as! MyTableViewCell
cell.myLabelView.titleLabel.text = &#34;Label&#34;
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 = &#34;Label&#34;
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]
查看完整版本: ios - 设置自定义 UIView 的不同水平对齐方式