作为一个简单的起点。我正在尝试创建一个自定义按钮,中间有一个活动指示器。 点击后 - 它会表明它正在思考
我几乎停留在第1步 - 将指标添加到周围视图中心。 无论需要约束我都会尝试它总是出现在左上角。
我错过了什么?
这是我的游乐场代码。
//: 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
答案 0 :(得分:3)
您想将1 mysite.com My Site
2 www.mysite.com My Site
设置为translatesAutoresizingMaskIntoConstraints
到false
。否则,UIActivityIndicatorView
将根据设置的大小调整掩码创建约束,这将与您已添加的屏蔽冲突。
UIKit
答案 1 :(得分:0)
另一个解决方案:使用superView中的给定帧创建UIActivityIndicator,然后调用:
parse
完全避免使用activityIndicator.center = self.center
,除非你真的需要它们。
但是,正如我在评论部分中所提到的,请确保在调用上一行之前将NSLayoutConstraints
布局到正确的大小。否则你的结果将完全相同。