Невозможно установить translatesAutoresizingMaskIntoConstraints

В попытке решить проблему автоматической компоновки, связанную с программным добавлением дополнительных представлений в прокрутку, я столкнулся с многими ссылками по всему интернету, что в разных сценариях говорят установить translatesAutoresizingMaskIntoConstraints = YES или translatesAutoresizingMaskIntoConstraints = NO, в зависимости от случая.

Однако, в Swift, когда я печатаю:

var view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false

Я получаю ошибку в строке: Cannot assign to 'translatesAutoresizingMaskIntoConstraints' in 'view'. Зачем? Поскольку при проверке вы обнаружите, что это функция без параметров, а не свойство.

Я обошел это путем подклассификации, но это является серьезным неудобством для подкласса каждого вида, с которым я имею дело, просто установите translatesAutoresizingMaskIntoConstraints:

class CardView: UIView {
    override func translatesAutoresizingMaskIntoConstraints() -> Bool {
        return false
    }
}

Кто-нибудь знает об этом, или может пролить свет на несоответствие между тем, что говорят вам общие интернет-советы, и тем, что вы действительно можете сделать, в Swift?

Ответ 1

translatesAutoresizingMaskIntoConstraints - фактически метод UIView, а не свойство.

Синтаксис работает, потому что ObjC позволяет использовать точечную нотацию для вызова методов (там есть еще одно обсуждение того, как свойства фактически автоматически генерируют методы getter/setter).

Используйте этот метод вместо того, чтобы пытаться использовать нотацию свойств из ObjC

view.setTranslatesAutoresizingMaskIntoConstraints(false) 

Ответ 2

Используйте view.setTranslatesAutoresizingMaskIntoConstraints(false) вместо этого.

Ответ 3

Swift 2

view.translatesAutoresizingMaskIntoConstraints = false