Snapkit 和 UILabel 的轮换

Posted

技术标签:

【中文标题】Snapkit 和 UILabel 的轮换【英文标题】:Snapkit and UILabel's rotation 【发布时间】:2017-06-12 19:23:24 【问题描述】:

我有:

    UIView(容器) UI 视图。 (1) 的子视图 - 下图中的深蓝色 UI 视图。 (1) 的子视图 - 下图中的紫色 UI标签。 edge.equalToSuperview()

我想要完成的事情:

问题是,我希望 UILabel 旋转 3pi/2 (270°)。一旦我完成了旋转,它就没有正确放置。

这是通过设置 edges.equalToSuperview() 和 270°旋转后的样子:

我试过这个(但它会导致崩溃):

myLabel.makeConstraints  make in
    make.top.equalTo(containerView.snp.left)
    make.right.equalTo(containerView.snp.top)
    make.left.equalTo(containerView.snp.bottom)
    make.bottom.equalTo(containerView.snp.right)

崩溃描述:

*** Terminating app due to uncaught exception 'NSInvalidLayoutConstraintException', reason: 'Constraint improperly relates anchors of incompatible types: <SnapKit.LayoutConstraint:0x6100000ad8c0@MyClass.swift#250 MyProject.MyLabel:0x7fcc2201ca80.top == UIView:0x7fcc2201bd30.left>'

有什么我可以在这里做的想法吗?

【问题讨论】:

【参考方案1】:

我已经使用默认的自动布局完成了它,我也非常喜欢它。 :)

这里是函数。

func makeLabel() 
        //Creating stackview
        let stackView = UIStackView()
        view.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.alignment = .fill
        stackView.distribution = .fillEqually
        stackView.axis = .vertical

        //Creating blueView
        let blueView = UIView()
        blueView.backgroundColor = UIColor.darkGray
        blueView.translatesAutoresizingMaskIntoConstraints = false
        stackView.addArrangedSubview(blueView)
        blueView.widthAnchor.constraint(equalToConstant: 100).isActive = true

        //Creating purpleView
        let purpleView = UIView()
        purpleView.backgroundColor = UIColor.purple
        purpleView.translatesAutoresizingMaskIntoConstraints = false
        stackView.addArrangedSubview(purpleView)

        stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
        stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
        stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true

        //Creating rotated label
        let label = UILabel()
        view.addSubview(label)
        label.transform = CGAffineTransform.init(rotationAngle: -CGFloat.pi/2)
        label.textColor = UIColor.white
        label.text = "This is my Rotated Text"
        label.font = UIFont.systemFont(ofSize: 25)
        label.translatesAutoresizingMaskIntoConstraints = false
        label.centerXAnchor.constraint(equalTo: stackView.centerXAnchor, constant: 0).isActive = true
        label.centerYAnchor.constraint(equalTo: stackView.centerYAnchor, constant: 0).isActive = true


    

这是输出。

肖像:

风景

【讨论】:

非常感谢!【参考方案2】:

对于任何对 elk_cloner 使用 Snapkit 的答案感兴趣的人:

myLabel.snp.makeConstraints  make in
    make.centerX.equalTo(containerView.snp.centerX)
    make.centerY.equalTo(containerView.snp.centerY)

【讨论】:

以上是关于Snapkit 和 UILabel 的轮换的主要内容,如果未能解决你的问题,请参考以下文章

Snapkit,将 UILabel 粘贴到底部

SnapKit 的自动布局未按预期响应

我怎样才能使用 SnapKit 实现这一点?

使用 Snapkit 的自定义视图在使用时不显示

UILabel 外观字体和属性字符串字体

自我调整大小的 UITableViewCell 中的 UIlabel 和 UIView 高度计算