News for hackers. Stuff that matters.
Re:Building DSLs in Swift by aaaaaaaaaab on Monday October 15, 2018 @08:41AM (#18219191)
Exactly.

But when people use these libraries that “helpfully” set `translatesAutoresizingMaskIntoConstraints = false` for them and they don’t understand what’s going on under the hood, their layout breaks and they start complaining about autolayout being “buggy”.

Re:Building DSLs in Swift by eugeniub on Monday October 15, 2018 @10:04AM (#18219706)
What's the solution in such a scenario? If I'm making custom cells, I'm going to constrain my views to the contentView. If I use a library like SnapKit, then the library sets translatesAutoresizingMaskIntoConstraints to false. Should I override that somehow and set it back to true? Should I use normal NSLayoutConstraints for all constraints involving contentView? That doesn't seem ideal.
Re:Building DSLs in Swift by aaaaaaaaaab on Monday October 15, 2018 @03:57PM (#18223118)
You can use the regular NSLayoutConstraints.activate() API, or you can set it back to true.

Also, notice that translatesAutoresizingMaskIntoConstraints will only be set on the view which you call `layout` on. I.e. this is bogus:

    self.contentView.layout { make in
          make.left.equal(self.otherView)
    }
But this is “fine”:

    self.otherView.layout { make in
        make.left.equal(self.contentView)
    }
Of course now you’re relying on implementation details of SnapKot/Masonry/whatever.

I personally just use the built-in anchor APIs with a few helpers (e.g. to create constraints to match all 4 edges of two views). In swift you have operator+ for arrays, so NSLayoutConstraints.activate(...) can be pretty succint this way.