UIView编程约束不起作用

时间:2017-02-28 01:25:59

标签: ios swift uiview

作为一个简单的起点。我正在尝试创建一个自定义按钮,中间有一个活动指示器。 点击后 - 它会表明它正在思考

我几乎停留在第1步 - 将指标添加到周围视图中心。 无论需要约束我都会尝试它总是出现在左上角。

我错过了什么?

Button Fail

这是我的游乐场代码。

//: Playground - noun: a place where people can play

import PlaygroundSupport
import UIKit

class ConnectButton : UIView {

    fileprivate let activityIndicator: UIActivityIndicatorView = {
        let activityIndicator = UIActivityIndicatorView()

        activityIndicator.color = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
        activityIndicator.hidesWhenStopped = true;
        activityIndicator.stopAnimating();
        activityIndicator.activityIndicatorViewStyle = .white;
        return activityIndicator;
    }()


    private func initView() {
        translatesAutoresizingMaskIntoConstraints = true;
        addSubview(activityIndicator);

        NSLayoutConstraint.activate([
            activityIndicator.centerYAnchor.constraint(equalTo: self.centerYAnchor),
            activityIndicator.leftAnchor.constraint(equalTo: self.centerXAnchor)
        ])
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder);
        self.initView();
    }

    override init(frame: CGRect) {
        super.init(frame: frame);
        self.initView();
    }

    public func startAnimating() {
        activityIndicator.startAnimating();
    }

    public func stopAnimating() {
        activityIndicator.stopAnimating();
    }
}

let dimensions = (width:200, height: 50);
let connectButton = ConnectButton(
    frame: CGRect(
        x: dimensions.width / 2,
        y: dimensions.height / 2,
        width: dimensions.width,
        height: dimensions.height
    )
)

connectButton.startAnimating();
connectButton.backgroundColor = #colorLiteral(red: 0.1764705926, green: 0.4980392158, blue: 0.7568627596, alpha: 1);

PlaygroundPage.current.liveView = connectButton

2 个答案:

答案 0 :(得分:3)

您想将1 mysite.com My Site 2 www.mysite.com My Site 设置为translatesAutoresizingMaskIntoConstraintsfalse。否则,UIActivityIndicatorView将根据设置的大小调整掩码创建约束,这将与您已添加的屏蔽冲突。

UIKit

答案 1 :(得分:0)

另一个解决方案:使用superView中的给定帧创建UIActivityIndi​​cator,然后调用:

parse

完全避免使用activityIndicator.center = self.center ,除非你真的需要它们。

但是,正如我在评论部分中所提到的,请确保在调用上一行之前将NSLayoutConstraints布局到正确的大小。否则你的结果将完全相同。