     
     private var collectionView: UICollectionView!
     private let layout = UICollectionViewFlowLayout()
-    private var state: ForecastViewState = .Collapsed
+    private var state: ForecastViewState = .Collapsed {
+        didSet {
+            guard expandable else { return }
+            guard let collectionView = collectionView else { return }
+            
+            collectionView.reloadData()
+            collectionView.layoutIfNeeded()
+            
+            UIView.animateWithDuration(duration, delay: 0, usingSpringWithDamping: 0.75, initialSpringVelocity: 0.6, options: .BeginFromCurrentState, animations: { [weak self] in
+                self?.invalidateIntrinsicContentSize()
+                self?.superview?.layoutIfNeeded()
+                }, completion: nil)
+        }
+    }
     private var items = [Forecast]() {
         didSet {
             NSOperationQueue.mainQueue().addOperationWithBlock {

    }
    
    // MARK: Private
    
    private func toggleLayout() {
        if !expandable {
            return
        }
        
        if state == .Collapsed {
            state = .Expanded
        } else {
            state = .Collapsed
        }
        
        collectionView.reloadData()
        collectionView.layoutIfNeeded()
        
        UIView.animateWithDuration(duration, delay: 0, usingSpringWithDamping: 0.75, initialSpringVelocity: 0.6, options: .BeginFromCurrentState, animations: { [weak self] in
            self?.invalidateIntrinsicContentSize()
            self?.superview?.layoutIfNeeded()
        }, completion: nil)
    }
    
    private func configureViews() {
        layout.scrollDirection = .Horizontal

    private enum ForecastViewState {
        case Collapsed
        case Expanded
        
        mutating func toggle() {
            if self == .Collapsed {
                self = .Expanded
            } else {
                self = .Collapsed
            }
        }
    }
        
    private func numberOfDays() -> Int {
