使用两个元素(1x UILabel,1x UIView)创建了一个自定义UIView'MyLabelView',这两个元素将设置为背景色。
MyLabelView
视图:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP
码:

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)
}

}

我在两种情况下使用MyLabelView:-MasterViewController(具有动态原型的TableViewController)-DetailViewController(具有静态单元格和分组样式的TableViewController)

MasterViewController
将MyLabelView正确显示为自定义UITableViewCellView的一部分:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP
代码(在cellForRowAt中):
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

DetailViewController
在这里,我想使用增加的字体大小(有效)并右对齐来呈现MyLabelView,以便无论Label文本有多长,它始终在chevronView旁边对齐:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP
代码(在viewDidLoad中):
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

预期结果
视图:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP
视图:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP
我尝试将其他外部UIView用作容器并使用AutoLayout,但由于某种原因它从未按预期工作。非常感谢您的帮助。Swift 4,iOS11

更新
我试图在IB中设置约束,因为我无法访问单元格(使用静态单元格)。内容视图:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP
标题:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP
MyLabelView:
ios - 设置自定义UIView的不同水平对齐方式-LMLPHP

最佳答案

只需将一个函数添加到UITableViewCell子类中,然后在需要在右侧设置视图时调用它:

func setTrailingAnchorForView() {
        contentView.translatesAutoresizingMaskIntoConstraints = false
        contentView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        contentView.trailingAnchor.constraint(equalTo: imageView.leadingAnchor, constant: 0).isActive = true
    }

这样称呼它:
cell.setTrailingAnchorForView()

10-06 15:00