每当我执行HTTP请求时,我都将此控件用作活动指示器
https://github.com/gontovnik/DGActivityIndicatorView
以下是我的称呼方式
let activityIndicator: DGActivityIndicatorView = DGActivityIndicatorView();
activityIndicator.backgroundColor = UIColor.clearColor();
activityIndicator.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height);
activityIndicator.size = 68;
activityIndicator.tintColor = tintColor;
//activityIndicator.type = DGActivityIndicatorAnimationType.BallClipRotatePulse;
activityIndicator.startAnimating();
view.addSubview(activityIndicator);
我在viewDidLoad
上跟我的HTTP请求代码一起调用它。
但是,这会导致activityIndicator位置不在中心,因为在viewDidLoad中,autolayout尚未完成布局。
我可以通过将代码放在viewDidAppear
上来解决这个问题,并将activityIndicator放在正确的位置。
但这很糟糕,因为HTTP请求只会在viewDidAppear上进行,这会浪费一个宝贵的秒。
我应该如何修改控件以使其自动居中?
此控件以Obj-C编码,我不熟悉DGActivityIndicatorView
答案 0 :(得分:1)
要将视图放在另一个视图的中心,请使用以下代码行:
activityIndicator.center = self.view.center;
此外,您可以为activityIndicator
创建全局属性。然后,您可以HTTP Request
中的viewDidLoad
开始,并在viewDidAppear
中写下上一行,使activityIndicator
居中。
答案 1 :(得分:0)
试试这个:
activityIndicator.center = CGPointMake(view.frame.size.width / 2,
view.frame.size.height / 2);
答案 2 :(得分:0)
试试这个:
activityIndicator.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(activityIndicator)
let xCenterConstraint = NSLayoutConstraint(item: activityIndicator, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0)
self.view..addConstraint(xCenterConstraint)
let yCenterConstraint = NSLayoutConstraint(item: activityIndicator, attribute: .CenterY, relatedBy: .Equal, toItem: self.view., attribute: .CenterY, multiplier: 1, constant: 0)
self.view..addConstraint(yCenterConstraint)
答案 3 :(得分:-1)
在控件本身中找到了一种方法
- (void)layoutSubviews {
[super layoutSubviews];
if (self.layer.sublayers != nil) {
self.frame = self.superview.frame;
self.layer.position = (CGPoint){CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)};
self.layer.sublayers[0].position = (CGPoint){CGRectGetMidX(self.layer.bounds), CGRectGetMidY(self.layer.bounds)};
}
}