2016-04-25 6 views
0

Почему мои UIView получили разные позиции на разных размерах экрана iPhone? Я думаю, это из-за autoresizingMask, но как я могу получить кадр представления после применения autoresizingMask, чтобы создать универсальную логику? или как лучше всего справиться с этим?Почему мой UIView получил другую позицию на разных iPhone?

вот код:

private func setup() { 

     positionView = CircularProjectPositionControl(frame: self.bounds) 
     positionView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
     positionView.outerCircleWidth = outerCircleWidth 

     assetsView = CircularProjectAssetsControl(frame: self.bounds) 
     assetsView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
     assetsView.backgroundColor = UIColor.clearColor() 
     assetsView.imageWidth = outerCircleWidth 

     let size = CGSize(width:40, height:40) 
     let width = floor(CGRectGetMidX(self.bounds) - size.width/2.0) 
     let height = floor(CGRectGetMidY(self.bounds) - size.width/2.0) 
     collaboratorView = AvatarView(frame: CGRect(x: width, y: height, width: size.width, height: size.height)) 
     collaboratorView.autoresizingMask = [.FlexibleBottomMargin, .FlexibleLeftMargin, .FlexibleRightMargin] 

     self.addSubview(assetsView) 
     self.addSubview(positionView) 
     self.addSubview(collaboratorView) 
    } 

iPhone 6s: enter image description here

iPhone 5: enter image description here

+0

Почему вы делаете это программно? Это будет намного проще с использованием ограничений автоматической компоновки в Storyboard –

+0

@ matt.writes.code. Я не могу использовать раскадровку здесь –

ответ

0

Похоже, вы только установить относительное положение с self.view. Если вы хотите, чтобы три круга имели одни и те же относительные позиции друг с другом, вы также должны установить ограничение между ними.

+0

, так что я должен добавить ограничения макета макета или маску autoresizingMask? –

1

Попробуйте добавить .CenterX & .CenterY контрсилами до центра каждого из подвидов:

NSLayoutConstraint(item: view1, attribute: .CenterX, relatedBy: .Equal, toItem: view2, attribute: .CenterX, multiplier: 1, constant: 0).active = true 
NSLayoutConstraint(item: view1, attribute: .CenterY, relatedBy: .Equal, toItem: view2, attribute: .CenterY, multiplier: 1, constant: 0).active = true