diff --git a/Applications/TextMate/src/Favorites.mm b/Applications/TextMate/src/Favorites.mm index efaace84..9836f237 100644 --- a/Applications/TextMate/src/Favorites.mm +++ b/Applications/TextMate/src/Favorites.mm @@ -69,15 +69,10 @@ static NSUInteger const kOakSourceIndexFavorites = 1; OakScopeBarView* scopeBar = [OakScopeBarView new]; scopeBar.labels = self.sourceListLabels; - OakBackgroundFillView* aboveScopeBarDark = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); - OakBackgroundFillView* aboveScopeBarLight = OakCreateHorizontalLine([NSColor colorWithCalibratedWhite:0.797 alpha:1], [NSColor colorWithCalibratedWhite:0.912 alpha:1]); - OakBackgroundFillView* topDivider = OakCreateHorizontalLine([NSColor darkGrayColor], [NSColor colorWithCalibratedWhite:0.551 alpha:1]); - OakBackgroundFillView* bottomDivider = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); + OakBackgroundFillView* topDivider = OakCreateHorizontalLine([NSColor darkGrayColor], [NSColor colorWithCalibratedWhite:0.551 alpha:1]); + OakBackgroundFillView* bottomDivider = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); NSDictionary* views = @{ - @"searchField": self.searchField, - @"aboveScopeBarDark": aboveScopeBarDark, - @"aboveScopeBarLight": aboveScopeBarLight, @"scopeBar": scopeBar, @"topDivider": topDivider, @"scrollView": self.scrollView, @@ -90,17 +85,14 @@ static NSUInteger const kOakSourceIndexFavorites = 1; OakAddAutoLayoutViewsToSuperview([views allValues], contentView); OakSetupKeyViewLoop(@[ self.tableView, self.searchField, scopeBar ]); - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[searchField(>=50)]-(8)-|" options:0 metrics:nil views:views]]; - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[aboveScopeBarDark(==aboveScopeBarLight)]|" options:0 metrics:nil views:views]]; [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[scopeBar]-(>=8)-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:views]]; [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==topDivider,==bottomDivider)]|" options:0 metrics:nil views:views]]; [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[statusTextField]-[itemCountTextField]-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; - [contentView addConstraint:[NSLayoutConstraint constraintWithItem:aboveScopeBarLight attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; [contentView addConstraint:[NSLayoutConstraint constraintWithItem:topDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; [contentView addConstraint:[NSLayoutConstraint constraintWithItem:bottomDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(2)-[searchField]-(8)-[aboveScopeBarDark][aboveScopeBarLight]-(3)-[scopeBar]-(4)-[topDivider][scrollView(>=50)][bottomDivider]-(4)-[statusTextField]-(5)-|" options:0 metrics:nil views:views]]; + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(4)-[scopeBar]-(4)-[topDivider][scrollView(>=50)][bottomDivider]-(4)-[statusTextField]-(5)-|" options:0 metrics:nil views:views]]; self.sourceIndex = [[NSUserDefaults standardUserDefaults] integerForKey:kUserDefaultsOpenProjectSourceIndex]; [scopeBar bind:NSValueBinding toObject:self withKeyPath:@"sourceIndex" options:nil]; diff --git a/Frameworks/OakFilterList/src/BundleItemChooser.mm b/Frameworks/OakFilterList/src/BundleItemChooser.mm index db7df054..061b197e 100644 --- a/Frameworks/OakFilterList/src/BundleItemChooser.mm +++ b/Frameworks/OakFilterList/src/BundleItemChooser.mm @@ -404,8 +404,6 @@ static std::vector relevant_items_in_scope (scope::context_t } @property (nonatomic) OakKeyEquivalentView* keyEquivalentView; @property (nonatomic) NSPopUpButton* actionsPopUpButton; -@property (nonatomic) NSView* aboveScopeBarDark; -@property (nonatomic) NSView* aboveScopeBarLight; @property (nonatomic) OakScopeBarView* scopeBar; @property (nonatomic) NSView* topDivider; @property (nonatomic) NSView* bottomDivider; @@ -470,9 +468,6 @@ static std::vector relevant_items_in_scope (scope::context_t [actionMenu addItem:[NSMenuItem separatorItem]]; [actionMenu addItemWithTitle:@"Search All Scopes" action:@selector(toggleSearchAllScopes:) keyEquivalent:key < 9 ? [NSString stringWithFormat:@"%c", '0' + (++key % 10)] : @""]; - self.aboveScopeBarDark = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); - self.aboveScopeBarLight = OakCreateHorizontalLine([NSColor colorWithCalibratedWhite:0.797 alpha:1], [NSColor colorWithCalibratedWhite:0.912 alpha:1]); - self.scopeBar = [OakScopeBarView new]; self.scopeBar.labels = _sourceListLabels; @@ -491,7 +486,29 @@ static std::vector relevant_items_in_scope (scope::context_t self.editButton.target = self; self.editButton.action = @selector(editItem:); - OakAddAutoLayoutViewsToSuperview([self.allViews allValues], self.window.contentView); + NSDictionary* views = @{ + @"scopeBar": self.scopeBar, + @"topDivider": self.topDivider, + @"scrollView": self.scrollView, + @"bottomDivider": self.bottomDivider, + @"status": self.statusTextField, + @"edit": self.editButton, + @"select": self.selectButton, + }; + + NSView* contentView = self.window.contentView; + OakAddAutoLayoutViewsToSuperview(views.allValues, contentView); + + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[scopeBar]-(>=8)-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:views]]; + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==topDivider,==bottomDivider)]|" options:0 metrics:nil views:views]]; + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(24)-[status]-[edit]-[select]-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(4)-[scopeBar]-(4)-[topDivider][scrollView(>=50)][bottomDivider]-(4)-[select]-(5)-|" options:0 metrics:nil views:views]]; + + [contentView addConstraint:[NSLayoutConstraint constraintWithItem:_topDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; + [contentView addConstraint:[NSLayoutConstraint constraintWithItem:_bottomDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; + + OakAddAutoLayoutViewsToSuperview(@[ self.actionsPopUpButton ], self.titleBarView); + [self.titleBarView removeConstraints:self.titleBarView.constraints]; [self setupLayoutConstraints]; [self.scopeBar bind:NSValueBinding toObject:self withKeyPath:@"sourceIndex" options:nil]; @@ -550,41 +567,17 @@ static std::vector relevant_items_in_scope (scope::context_t } } -- (NSDictionary*)allViews -{ - return @{ - @"searchField": self.keyEquivalentInput ? self.keyEquivalentView : self.searchField, - @"actions": self.actionsPopUpButton, - @"aboveScopeBarDark": self.aboveScopeBarDark, - @"aboveScopeBarLight": self.aboveScopeBarLight, - @"scopeBar": self.scopeBar, - @"topDivider": self.topDivider, - @"scrollView": self.scrollView, - @"bottomDivider": self.bottomDivider, - @"status": self.statusTextField, - @"edit": self.editButton, - @"select": self.selectButton, - }; -} - - (void)setupLayoutConstraints { - NSDictionary* views = self.allViews; + NSDictionary* views = @{ + @"searchField": self.keyEquivalentInput ? self.keyEquivalentView : self.searchField, + @"actions": self.actionsPopUpButton, + }; NSMutableArray* constraints = [NSMutableArray array]; - [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[searchField(>=50)]-[actions]-(8)-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; - [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[aboveScopeBarDark(==aboveScopeBarLight)]|" options:0 metrics:nil views:views]]; - [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[scopeBar]-(>=8)-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:views]]; - [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==topDivider,==bottomDivider)]|" options:0 metrics:nil views:views]]; - [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(24)-[status]-[edit]-[select]-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; - [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(2)-[searchField]-(8)-[aboveScopeBarDark][aboveScopeBarLight]-(3)-[scopeBar]-(4)-[topDivider][scrollView(>=50)][bottomDivider]-(4)-[select]-(5)-|" options:0 metrics:nil views:views]]; - - NSView* contentView = self.window.contentView; - [constraints addObject:[NSLayoutConstraint constraintWithItem:_aboveScopeBarLight attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; - [constraints addObject:[NSLayoutConstraint constraintWithItem:_topDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; - [constraints addObject:[NSLayoutConstraint constraintWithItem:_bottomDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; - - [contentView addConstraints:constraints]; + [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[searchField(>=50)]-[actions]-(8)-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; + [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(4)-[searchField]-(8)-|" options:0 metrics:nil views:views]]; + [self.titleBarView addConstraints:constraints]; self.layoutConstraints = constraints; OakSetupKeyViewLoop(@[ (self.keyEquivalentInput ? self.keyEquivalentView : self.searchField), self.actionsPopUpButton, self.scopeBar, self.editButton, self.selectButton ]); @@ -646,7 +639,7 @@ static std::vector relevant_items_in_scope (scope::context_t _keyEquivalentInput = flag; - NSView* contentView = self.window.contentView; + NSView* contentView = self.titleBarView; [contentView removeConstraints:self.layoutConstraints]; self.layoutConstraints = nil; diff --git a/Frameworks/OakFilterList/src/FileChooser.mm b/Frameworks/OakFilterList/src/FileChooser.mm index 90b30cf3..fb3ad890 100644 --- a/Frameworks/OakFilterList/src/FileChooser.mm +++ b/Frameworks/OakFilterList/src/FileChooser.mm @@ -253,7 +253,6 @@ static NSDictionary* globs_for_path (std::string const& path) _sourceListLabels = @[ @"All", @"Open Documents", @"Uncommitted Documents" ]; _searchResults = [NSMutableArray array]; - [self.window setContentBorderThickness:57 forEdge:NSMaxYEdge]; self.tableView.allowsMultipleSelection = YES; self.tableView.rowHeight = 38; @@ -265,15 +264,10 @@ static NSDictionary* globs_for_path (std::string const& path) _progressIndicator.controlSize = NSControlSizeSmall; _progressIndicator.displayedWhenStopped = NO; - OakBackgroundFillView* aboveScopeBarDark = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); - OakBackgroundFillView* aboveScopeBarLight = OakCreateHorizontalLine([NSColor colorWithCalibratedWhite:0.797 alpha:1], [NSColor colorWithCalibratedWhite:0.912 alpha:1]); - OakBackgroundFillView* topDivider = OakCreateHorizontalLine([NSColor darkGrayColor], [NSColor colorWithCalibratedWhite:0.551 alpha:1]); - OakBackgroundFillView* bottomDivider = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); + OakBackgroundFillView* topDivider = OakCreateHorizontalLine([NSColor darkGrayColor], [NSColor colorWithCalibratedWhite:0.551 alpha:1]); + OakBackgroundFillView* bottomDivider = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); NSDictionary* views = @{ - @"searchField": self.searchField, - @"aboveScopeBarDark": aboveScopeBarDark, - @"aboveScopeBarLight": aboveScopeBarLight, @"scopeBar": scopeBar, @"topDivider": topDivider, @"scrollView": self.scrollView, @@ -287,17 +281,14 @@ static NSDictionary* globs_for_path (std::string const& path) OakAddAutoLayoutViewsToSuperview([views allValues], contentView); OakSetupKeyViewLoop(@[ self.searchField, scopeBar ]); - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[searchField(>=50)]-(8)-|" options:0 metrics:nil views:views]]; - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[aboveScopeBarDark(==aboveScopeBarLight)]|" options:0 metrics:nil views:views]]; [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[scopeBar]-(>=8)-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:views]]; [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==topDivider,==bottomDivider)]|" options:0 metrics:nil views:views]]; [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(24)-[statusTextField]-[itemCountTextField]-(4)-[progressIndicator]-(4)-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; - [contentView addConstraint:[NSLayoutConstraint constraintWithItem:aboveScopeBarLight attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; [contentView addConstraint:[NSLayoutConstraint constraintWithItem:topDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; [contentView addConstraint:[NSLayoutConstraint constraintWithItem:bottomDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(2)-[searchField]-(8)-[aboveScopeBarDark][aboveScopeBarLight]-(3)-[scopeBar]-(4)-[topDivider][scrollView(>=50)][bottomDivider]-(4)-[statusTextField]-(5)-|" options:0 metrics:nil views:views]]; + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(4)-[scopeBar]-(4)-[topDivider][scrollView(>=50)][bottomDivider]-(4)-[statusTextField]-(5)-|" options:0 metrics:nil views:views]]; self.sourceIndex = [[NSUserDefaults standardUserDefaults] integerForKey:kUserDefaultsFileChooserSourceIndexKey]; diff --git a/Frameworks/OakFilterList/src/OakChooser.h b/Frameworks/OakFilterList/src/OakChooser.h index a994cbe6..750f6ffb 100644 --- a/Frameworks/OakFilterList/src/OakChooser.h +++ b/Frameworks/OakFilterList/src/OakChooser.h @@ -21,6 +21,7 @@ PUBLIC @interface OakChooser : NSResponder // For subclasses @property (nonatomic) NSArray* items; +@property (nonatomic, readonly) NSView* titleBarView; @property (nonatomic) NSSearchField* searchField; @property (nonatomic) NSScrollView* scrollView; @property (nonatomic) NSTableView* tableView; diff --git a/Frameworks/OakFilterList/src/OakChooser.mm b/Frameworks/OakFilterList/src/OakChooser.mm index c0c36da0..3ab014ef 100644 --- a/Frameworks/OakFilterList/src/OakChooser.mm +++ b/Frameworks/OakFilterList/src/OakChooser.mm @@ -112,6 +112,10 @@ NSMutableAttributedString* CreateAttributedStringWithMarkedUpRanges (std::string } @interface OakChooser () +{ + NSTitlebarAccessoryViewController* _accessoryViewController; + NSView* _titleBarView; +} @end static void* kFirstResponderBinding = &kFirstResponderBinding; @@ -173,11 +177,7 @@ static void* kFirstResponderBinding = &kFirstResponderBinding; [[_itemCountTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; [_itemCountTextField setContentHuggingPriority:NSLayoutPriorityDefaultHigh forOrientation:NSLayoutConstraintOrientationHorizontal]; - _window = [[NSPanel alloc] initWithContentRect:NSMakeRect(600, 700, 400, 500) styleMask:(NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskResizable|NSWindowStyleMaskTexturedBackground) backing:NSBackingStoreBuffered defer:NO]; - [_window setAutorecalculatesContentBorderThickness:NO forEdge:NSMaxYEdge]; - [_window setAutorecalculatesContentBorderThickness:NO forEdge:NSMinYEdge]; - [_window setContentBorderThickness:32 forEdge:NSMaxYEdge]; - [_window setContentBorderThickness:23 forEdge:NSMinYEdge]; + _window = [[NSPanel alloc] initWithContentRect:NSMakeRect(600, 700, 400, 500) styleMask:(NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskResizable) backing:NSBackingStoreBuffered defer:NO]; [[_window standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES]; [[_window standardWindowButton:NSWindowZoomButton] setHidden:YES]; _window.delegate = self; @@ -187,6 +187,13 @@ static void* kFirstResponderBinding = &kFirstResponderBinding; [_searchField bind:NSValueBinding toObject:self withKeyPath:@"filterString" options:nil]; [_window addObserver:self forKeyPath:@"firstResponder" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:kFirstResponderBinding]; + + if(NSView* titleBarView = self.titleBarView) + { + _accessoryViewController = [[NSTitlebarAccessoryViewController alloc] init]; + _accessoryViewController.view = titleBarView; + [self.window addTitlebarAccessoryViewController:_accessoryViewController]; + } } return self; } @@ -203,6 +210,24 @@ static void* kFirstResponderBinding = &kFirstResponderBinding; _tableView.delegate = nil; } +- (NSView*)titleBarView +{ + if(!_titleBarView) + { + _titleBarView = [[NSView alloc] initWithFrame:NSZeroRect]; + + NSDictionary* titleBarViews = @{ + @"searchField": self.searchField + }; + + OakAddAutoLayoutViewsToSuperview(titleBarViews.allValues, _titleBarView); + [_titleBarView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[searchField]-(8)-|" options:0 metrics:nil views:titleBarViews]]; + [_titleBarView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(4)-[searchField]-(8)-|" options:0 metrics:nil views:titleBarViews]]; + [_titleBarView setFrameSize:_titleBarView.fittingSize]; + } + return _titleBarView; +} + - (void)showWindow:(id)sender { [_window makeFirstResponder:_window.initialFirstResponder]; diff --git a/Frameworks/OakFilterList/src/SymbolChooser.mm b/Frameworks/OakFilterList/src/SymbolChooser.mm index f1398ac8..8c148990 100644 --- a/Frameworks/OakFilterList/src/SymbolChooser.mm +++ b/Frameworks/OakFilterList/src/SymbolChooser.mm @@ -41,12 +41,9 @@ static SymbolChooserItem* CreateItem (OakDocument* document, text::pos_t const& { self.window.title = @"Jump to Symbol"; - OakBackgroundFillView* topDivider = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); OakBackgroundFillView* bottomDivider = OakCreateHorizontalLine([NSColor grayColor], [NSColor lightGrayColor]); NSDictionary* views = @{ - @"searchField": self.searchField, - @"topDivider": topDivider, @"scrollView": self.scrollView, @"bottomDivider": bottomDivider, @"statusTextField": self.statusTextField, @@ -55,15 +52,12 @@ static SymbolChooserItem* CreateItem (OakDocument* document, text::pos_t const& NSView* contentView = self.window.contentView; OakAddAutoLayoutViewsToSuperview([views allValues], contentView); + OakSetupKeyViewLoop(@[ self.searchField ]); - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(8)-[searchField(>=50)]-(8)-|" options:0 metrics:nil views:views]]; - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==topDivider,==bottomDivider)]|" options:0 metrics:nil views:views]]; - - [contentView addConstraint:[NSLayoutConstraint constraintWithItem:topDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==bottomDivider)]|" options:0 metrics:nil views:views]]; [contentView addConstraint:[NSLayoutConstraint constraintWithItem:bottomDivider attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]]; - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[statusTextField]-[itemCountTextField]-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:views]]; - [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(2)-[searchField]-(8)-[topDivider][scrollView(>=50)][bottomDivider]-(4)-[statusTextField]-(5)-|" options:0 metrics:nil views:views]]; + [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView(>=50)][bottomDivider]-(4)-[statusTextField]-(5)-|" options:0 metrics:nil views:views]]; } return self; }