带约束的iOS自定义UIControl,UITextView:无法同时满足约束

带约束的iOS自定义UIControl,UITextView:无法同时满足约束,ios,constraints,nslayoutconstraint,Ios,Constraints,Nslayoutconstraint,我创建了一个自定义的UITextView,它可以进行一些语法高亮显示,而且效果非常好。当我创建一个常规的UITextView并添加约束时,我没有收到任何错误或警告。当我使用自定义的UITextView(它继承自UITextView)时,会收到各种各样的约束警告,表明它无法满足我添加的约束。例如: ( "<NSLayoutConstraint:0x7b9c8750 MyApp.MyCodeAppTextView:0x7c280200.width == UIView:0x7bc621c

我创建了一个自定义的
UITextView
,它可以进行一些语法高亮显示,而且效果非常好。当我创建一个常规的
UITextView
并添加约束时,我没有收到任何错误或警告。当我使用自定义的
UITextView
(它继承自
UITextView
)时,会收到各种各样的约束警告,表明它无法满足我添加的约束。例如:

(
    "<NSLayoutConstraint:0x7b9c8750 MyApp.MyCodeAppTextView:0x7c280200.width == UIView:0x7bc621c0.width>",
    "<NSAutoresizingMaskLayoutConstraint:0x7bc68be0 h=--& v=--& H:[MyApp.MyCodeAppTextView:0x7c280200(0)]>",
    "<NSLayoutConstraint:0x7bc6a720 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7bc621c0(320)]>"
)
(
"",
"",
""
)

有什么我必须添加到我的自定义UIControl/UITextView以便它能够正确响应约束吗?

显然,您需要将这三样东西放在您的自定义类中

  • setTranslatesAutoresizingMaskIntoConstraints(false)
  • intrinsicContentSize
  • requiresConstraintBasedLayout

  • 考虑到这一点,这是我添加到自定义类中使其工作的代码

    import UIKit
    
    public class YourCustomUIControl:UIView {
        required public init(coder aDecoder: NSCoder) {
            super.init()
            setTranslatesAutoresizingMaskIntoConstraints(false)
        }
    
        override public func intrinsicContentSize() -> CGSize {
            return CGSizeMake(100, 70)
        }
    
        override class public func requiresConstraintBasedLayout() -> Bool {
            return true
        }
    }