自定义控件仅在iPhone 6和iPhone 6s模拟器上不显示

时间:2017-04-10 08:17:59

标签: ios iphone swift uiview

我正在创建一个自定义控件。 当我运行该程序时,自定义控件不会显示在iPhone 6和iPhone 6s模拟器上。在iPhone 7,iPhone 7 plus,iPhone SE等等。一切正常。

在我的控制中,我放了UIViewbackView)在其上绘制路径,并在其上UIImageViewUIButton。这就像一个单按钮的酒吧。

以下是我的来源的一些相关部分

import UIKit

@IBDesignable
class ButtonBar: UIControl {

    // -- MARK: controls
    @IBOutlet weak var backView: UIView!
    @IBOutlet weak var image: UIImageView!
    @IBOutlet weak var actionButton: UIButton!
    @IBOutlet weak var buttonTopConstraint: NSLayoutConstraint!

    // -- MARK: customize properties
    // some @IBInspectable properties here...

    // -- MARK: other properties
    weak var view: UIView!
    var backgroundLayer: CAShapeLayer!

    // -- MARK: init()s
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupSubViews()
    }

    convenience init() {
        self.init(frame: CGRect.zero)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupSubViews()
    }

    // -- MARK: override functions
    override func layoutSubviews() {
        guard view != nil else {
            return
        }

        view.frame = bounds
        self.refresh()
    }

    // -- MARK: other functions
    func loadViewFromNib() -> UIView {
        let clazz = type(of: self)
        let bundle = Bundle(for: clazz)
        let nib = UINib(nibName: "\(clazz)", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        return view
    }

    func setupSubViews() {
        view = loadViewFromNib()
        view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]
        self.addSubview(view)
        self.backgroundLayer = CAShapeLayer()
        self.backView.layer.addSublayer(self.backgroundLayer)
        self.refresh()
    }

    public func refresh() {
        let path = UIBezierPath()
        // code to create the path...
        path.close()

        self.backgroundLayer.path = path.cgPath
        self.backgroundLayer.fillColor = self.barColor.cgColor
        self.backgroundLayer.strokeColor = self.borderColor.cgColor
        self.backgroundLayer.lineWidth = CGFloat(self.borderWidth)

        self.backView.layer.replaceSublayer(self.backgroundLayer, with: self.backgroundLayer)

        self.image.image = self.buttonImage

        self.buttonTopConstraint.constant = CGFloat(t - to)
    }
}

我只是将UIView拖入我的故事板并将其类设置为此自定义控件。

如果我覆盖draw(_:)函数并在其中调用refresh()函数,则它适用于iPhone 6 [s]模拟器。但我知道,由于某些性能问题,这不是一个好习惯。

我的代码中是否有问题或只是iPhone 6 [s]模拟器的错误?

== update == 我将我的项目发送给使用xcode 8.2的其他人(我刚刚将其升级到8.3.1),他删除了底部约束并再次使用相同的值重新添加。问题已解决。

我收到了他发回给我的项目并删除了约束,然后再次添加。这个问题没有复制。虽然我对原始项目做了同样的事情,但问题仍然存在。

这是xcode的错误吗?

0 个答案:

没有答案