As frameworks improves, as our knowledge of it, we should leave our prejudices in the past. It is without question that AutoLayout has become much beloved and necessary as it moves forward. Its API has improved so drastically as to discard the need for third-party libraries.

However, as far as AutoLayout has progressed, it may still be simpler to handle frames in some cases. But how to join both worlds without colliding them and throwing a bunch of warnings in your console? Or worst: in your IB…

Customize layoutSubviews

Depending on the simplicity of what you want to achieve, implementing your own version of layoutSubviews without relying on the SDK can be simple and effective:

1
2
3
4
5
6
7
8
9
override func layoutSubviews() {
    _ = subviews.reduce(0) { (x, view) -> CGFloat in
        let size = view.intrinsicContentSize
        view.frame = CGRect(
            origin: CGPoint(x: x, y: 0),
            size: size)
        return view.frame.maxX + Constants.spacing
    }
}

Adopting intrinsicContentSize

As you may have noticed in the example above, by overriding intrinsicContentSize you can have a view that defines its own size without depending on constraints or content.

1
2
3
override var intrinsicContentSize: CGSize {
    return isExpanded ? Constants.expandedSize : Constants.regularSize
}

Btw, it’s animatable 💖

Redux sucks with React-Native

Redux is hugely widespread as **the** architecture for React and React-Native projects. Itsdecoupled nature combined with immutability …… Continue reading