Я пытаюсь понять логику ограничений и кое-что не могу понять...
Я создал собственный UIButton и добавил некоторые ограничения, чтобы изменить его ширину и высоту, и он работает нормально. Но я не могу найти новые значения ширины и высоты кнопки. Как я могу получить эти значения после того, как ограничения изменят их?
Вот мой код...
import Foundation
import UIKit
class RoundedButton: UIButton {
class func make (text:String, color:UIColor) -> RoundedButton {
let button = self.buttonWithType(UIButtonType.System) as RoundedButton
button.frame = CGRectMake(0, 0, 150, 40)
button.layer.cornerRadius = 20
button.layer.borderColor = color.CGColor
button.layer.borderWidth = 2
button.setTitle(text, forState: UIControlState.Normal)
button.setTitleColor(color, forState: UIControlState.Normal)
button.titleLabel?.font = UIFont(name: "OpenSans-Semibold", size: 14)
return button
}
func resizeAndPlace(width:CGFloat, height:CGFloat)
{
self.setTranslatesAutoresizingMaskIntoConstraints(false)
let widthCons = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: width)
let heightCons = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: height)
self.superview!.addConstraint(widthCons)
self.superview!.addConstraint(heightCons)
println(self.frame.width) // 150 and never changes
}
}
superview
кнопки, так как они влияют только на саму кнопку.self.addConstraint ...
будет достаточно. - person vacawama   schedule 29.07.2015active
значениеtrue
. Например,widthCons.active = true
. - person vacawama   schedule 29.07.2015active = true
— это новый способ с IOS 8. Старый способ устарел и исчезнет в будущем. Используйте старый способ для поддержки старых версий iOS. Новый способ проще, потому что iOS сама определяет, к каким представлениям добавлять ограничения. Вы можете легко деактивировать ограничения с помощьюactive = false
. Вы можете активировать массив ограничений, вызвав метод классаNSLayoutConstraint.activateConstraints(c)
, который удобен для ограничений, созданных с помощью языка визуального формата. - person vacawama   schedule 30.07.2015