diff options
author | Zoia Pribytkova <niakris90@gmail.com> | 2019-05-23 17:36:26 +0300 |
---|---|---|
committer | Aleksey Belousov <beloal@users.noreply.github.com> | 2019-05-31 12:20:28 +0300 |
commit | 9339720c19a71642df7a6aa5b95c752bcc4e52b9 (patch) | |
tree | 5cdf2a6119fb79278d4405749756e54b280ee28e /iphone | |
parent | 771b7b09cf56c82094e511bafdf2eb080b2889d6 (diff) |
[iOS] New place page state (preview plus)
Diffstat (limited to 'iphone')
9 files changed, 159 insertions, 161 deletions
diff --git a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings index 2e46af89e4..6e09a24cef 100644 --- a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings @@ -2367,7 +2367,7 @@ "error_already_downloaded" = "This list has already been downloaded"; -"popular_place" = "Popular"; +"popular_place" = "TOP"; "download_routes" = "Download routes"; diff --git a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings index eb685d0317..0d94db3e58 100644 --- a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings @@ -2367,7 +2367,7 @@ "error_already_downloaded" = "This list has already been downloaded"; -"popular_place" = "Popular"; +"popular_place" = "TOP"; "download_routes" = "Download routes"; diff --git a/iphone/Maps/UI/Ads/AdBanner.swift b/iphone/Maps/UI/Ads/AdBanner.swift index a45082f325..c9c461c28b 100644 --- a/iphone/Maps/UI/Ads/AdBanner.swift +++ b/iphone/Maps/UI/Ads/AdBanner.swift @@ -69,7 +69,7 @@ final class AdBanner: UITableViewCell { @objc var onRemoveAds: MWMVoidBlock? - @objc static let detailedBannerExcessHeight: Float = 36 + @objc static let detailedBannerExcessHeight: Float = 52 enum AdType { case native diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageData.h b/iphone/Maps/UI/PlacePage/MWMPlacePageData.h index 1b34b26bd3..1a0e1f2155 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageData.h +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageData.h @@ -255,7 +255,7 @@ using NewSectionsAreReady = void (^)(NSRange const & range, MWMPlacePageData * d - (BOOL)isMyPosition; - (BOOL)isRoutePoint; - (RoadWarningMarkType)roadType; -- (BOOL)isPreviewExtended; +- (BOOL)isPreviewPlus; - (BOOL)isPartnerAppInstalled; + (MWMRatingSummaryViewValueType)ratingValueType:(place_page::rating::Impress)impress; diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm index f5343093f0..14b870b536 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm @@ -809,7 +809,7 @@ NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; - (BOOL)isHTMLDescription { return strings::IsHTML(GetPreferredBookmarkStr(m_info.GetBookmarkData().m_description)); } - (BOOL)isRoutePoint { return m_info.IsRoutePoint(); } - (RoadWarningMarkType)roadType { return m_info.GetRoadType(); } -- (BOOL)isPreviewExtended { return m_info.GetOpeningMode() == place_page::OpeningMode::Details; } +- (BOOL)isPreviewPlus { return m_info.GetOpeningMode() == place_page::OpeningMode::PreviewPlus; } - (BOOL)isPartnerAppInstalled { // TODO(): Load list of registered schemas from plist. diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm b/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm index 86383dd078..5eb1f70afe 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm @@ -239,7 +239,7 @@ void RegisterEventIfPossible(eye::MapObject::Event::Type const type, place_page: - (void)destroyLayout { self.layout = nil; } - (void)closePlacePage { GetFramework().DeactivateMapSelection(true); } -- (BOOL)isExpandedOnShow { return self.data.isPreviewExtended; } +- (BOOL)isPreviewPlus { return self.data.isPreviewPlus; } - (void)onExpanded { if (self.isSponsoredOpenLogged) diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMPlacePageLayout.h b/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMPlacePageLayout.h index eca44f7097..653d1c0f6e 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMPlacePageLayout.h +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMPlacePageLayout.h @@ -9,7 +9,8 @@ enum class NodeStatus; - (void)destroyLayout; - (void)closePlacePage; -- (BOOL)isExpandedOnShow; +- (BOOL)isPreviewPlus; + - (void)onExpanded; @end diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMiPhonePlacePageLayoutImpl.mm b/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMiPhonePlacePageLayoutImpl.mm index 7cc8c908ec..0216358748 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMiPhonePlacePageLayoutImpl.mm +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/MWMiPhonePlacePageLayoutImpl.mm @@ -5,18 +5,6 @@ namespace { -enum class ScrollDirection -{ - Up, - Down -}; - -enum class State -{ - Bottom, - Top, - Expanded -}; CGFloat const kTopPlacePageStopValue = 0.7; CGFloat const kExpandedPlacePageStopValue = 0.5; @@ -26,12 +14,23 @@ CGFloat const kLuftDraggingOffset = 30; CGFloat const kMinOffset = 1; } // namespace +typedef NS_ENUM(NSUInteger, MWMOffsetState) { + MWMOffsetStatePreview, + MWMOffsetStatePreviewPlus, + MWMOffsetStateOpen +}; + +typedef NS_ENUM(NSUInteger, MWMScrollDirection) { + MWMScrollDirectionUp, + MWMScrollDirectionDown +}; + @interface MWMiPhonePlacePageLayoutImpl ()<UIScrollViewDelegate, UITableViewDelegate, MWMPPPreviewLayoutHelperDelegate> @property(nonatomic) MWMPPScrollView * scrollView; -@property(nonatomic) ScrollDirection direction; -@property(nonatomic) State state; +@property(nonatomic) MWMScrollDirection direction; +@property(nonatomic) MWMOffsetState state; @property(nonatomic) CGFloat lastContentOffset; @property(weak, nonatomic) MWMPPPreviewLayoutHelper * previewLayoutHelper; @@ -50,12 +49,10 @@ CGFloat const kMinOffset = 1; - (instancetype)initOwnerView:(UIView *)ownerView placePageView:(MWMPPView *)placePageView - delegate:(id<MWMPlacePageLayoutDelegate>)delegate -{ + delegate:(id<MWMPlacePageLayoutDelegate>)delegate { self = [super init]; - if (self) - { - auto const & size = ownerView.size; + if (self) { + CGSize size = ownerView.size; _ownerView = ownerView; _availableArea = ownerView.frame; _placePageView = placePageView; @@ -68,9 +65,8 @@ CGFloat const kMinOffset = 1; return self; } -- (void)onShow -{ - self.state = [self.delegate isExpandedOnShow] ? State::Expanded : State::Bottom; +- (void)onShow { + self.state = [self.delegate isPreviewPlus] ? MWMOffsetStatePreviewPlus : MWMOffsetStatePreview; auto scrollView = self.scrollView; [scrollView setContentOffset:{ 0., kMinOffset }]; @@ -79,14 +75,13 @@ CGFloat const kMinOffset = 1; place_page_layout::animate(^{ [self.actionBar setVisible:YES]; auto const targetOffset = - self.state == State::Expanded ? self.expandedContentOffset : self.bottomContentOffset; + self.state == MWMOffsetStatePreviewPlus ? self.previewPlusContentOffset : self.previewContentOffset; [self setAnimatedContentOffset:targetOffset]; }); }); } -- (void)onClose -{ +- (void)onClose { self.actionBar = nil; place_page_layout::animate(^{ [self setAnimatedContentOffset:0]; @@ -99,8 +94,7 @@ CGFloat const kMinOffset = 1; }); } -- (void)updateAvailableArea:(CGRect)frame -{ +- (void)updateAvailableArea:(CGRect)frame { if (CGRectEqualToRect(self.availableArea, frame)) return; self.availableArea = frame; @@ -109,78 +103,77 @@ CGFloat const kMinOffset = 1; sv.delegate = nil; sv.frame = frame; sv.delegate = self; - auto const size = frame.size; + CGSize size = frame.size; self.placePageView.minY = size.height; - [self.delegate onPlacePageTopBoundChanged:self.scrollView.contentOffset.y]; - [self setAnimatedContentOffset:self.state == State::Top ? self.topContentOffset - : self.bottomContentOffset]; + id<MWMPlacePageLayoutDelegate> delegate = self.delegate; + if (delegate == nil) { return; } + [delegate onPlacePageTopBoundChanged:self.scrollView.contentOffset.y]; + CGFloat previewOffset = [delegate isPreviewPlus] ? self.previewPlusContentOffset : self.previewContentOffset; + [self setAnimatedContentOffset:self.state == MWMOffsetStateOpen ? self.topContentOffset : previewOffset]; } -- (void)updateContentLayout -{ +- (void)updateContentLayout { auto const & size = self.availableArea.size; self.scrollView.contentSize = {size.width, size.height + self.placePageView.height}; } -- (void)setPreviewLayoutHelper:(MWMPPPreviewLayoutHelper *)previewLayoutHelper -{ +- (void)setPreviewLayoutHelper:(MWMPPPreviewLayoutHelper *)previewLayoutHelper { previewLayoutHelper.delegate = self; _previewLayoutHelper = previewLayoutHelper; } #pragma mark - MWMPPPreviewLayoutHelperDelegate -- (void)heightWasChanged -{ +- (void)heightWasChanged { dispatch_async(dispatch_get_main_queue(), ^{ - if (self.state == State::Bottom) - [self setAnimatedContentOffset:self.bottomContentOffset]; + if (self.state == MWMOffsetStatePreview) + [self setAnimatedContentOffset:self.previewContentOffset]; + if (self.state == MWMOffsetStatePreviewPlus) + [self setAnimatedContentOffset:self.previewPlusContentOffset]; }); } #pragma mark - UIScrollViewDelegate -- (BOOL)isPortrait -{ - auto const & s = self.ownerView.size; - return s.height > s.width; +- (BOOL)isPortrait { + CGSize size = self.ownerView.size; + return size.height > size.width; } -- (CGFloat)openContentOffset -{ - auto const & size = self.ownerView.size; - auto const offset = self.isPortrait ? MAX(size.width, size.height) : MIN(size.width, size.height); +- (CGFloat)openContentOffset { + CGSize size = self.ownerView.size; + CGFloat offset = self.isPortrait ? MAX(size.width, size.height) : MIN(size.width, size.height); return offset * kTopPlacePageStopValue; } -- (CGFloat)topContentOffset -{ - auto const target = self.openContentOffset; - auto const ppViewMaxY = self.placePageView.tableView.maxY; +- (CGFloat)topContentOffset { + CGFloat target = self.openContentOffset; + CGFloat ppViewMaxY = self.placePageView.tableView.maxY; return MIN(target, ppViewMaxY); } -- (CGFloat)expandedContentOffset -{ - auto const & size = self.ownerView.size; - auto const offset = self.isPortrait ? MAX(size.width, size.height) : MIN(size.width, size.height); - return offset * kExpandedPlacePageStopValue; +- (CGFloat)previewPlusContentOffset { + CGSize size = self.ownerView.size; + CGFloat offset = self.isPortrait ? MAX(size.width, size.height) : MIN(size.width, size.height); + CGFloat previewPlusOffset = offset * kExpandedPlacePageStopValue; + CGFloat previewOffset = [self previewContentOffset]; + if (previewPlusOffset < previewOffset + kLuftDraggingOffset) { + return previewOffset + kLuftDraggingOffset; + } + return previewPlusOffset; } -- (CGFloat)bottomContentOffset -{ +- (CGFloat)previewContentOffset { return self.previewLayoutHelper.height + self.actionBar.height - self.placePageView.top.height; } -- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView -{ +- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { dispatch_async(dispatch_get_main_queue(), ^{ self.isOffsetAnimated = NO; }); } -- (void)scrollViewDidScroll:(MWMPPScrollView *)scrollView -{ +- (void)scrollViewDidScroll:(MWMPPScrollView *)scrollView { if (self.isOffsetAnimated) return; auto ppView = self.placePageView; @@ -189,90 +182,108 @@ CGFloat const kMinOffset = 1; auto const & offsetY = scrollView.contentOffset.y; id<MWMPlacePageLayoutDelegate> delegate = self.delegate; - if (offsetY <= 0) - { + if (offsetY <= 0) { [delegate onPlacePageTopBoundChanged:0]; [delegate closePlacePage]; return; } auto const bounded = ppView.height + kLuftDraggingOffset; - if (offsetY > bounded) - { + if (offsetY > bounded) { [scrollView setContentOffset:{0, bounded}]; [delegate onPlacePageTopBoundChanged:bounded]; - } - else - { + } else { [delegate onPlacePageTopBoundChanged:offsetY]; } - self.direction = self.lastContentOffset < offsetY ? ScrollDirection::Up : ScrollDirection::Down; + self.direction = self.lastContentOffset < offsetY ? MWMScrollDirectionUp : MWMScrollDirectionDown; self.lastContentOffset = offsetY; } - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity - targetContentOffset:(inout CGPoint *)targetContentOffset -{ - auto const actualOffset = scrollView.contentOffset.y; - auto const openOffset = self.openContentOffset; - auto const targetOffset = (*targetContentOffset).y; - - if (actualOffset > self.bottomContentOffset && actualOffset < openOffset) - { - auto const isDirectionUp = self.direction == ScrollDirection::Up; - self.state = isDirectionUp ? State::Top : State::Bottom; - (*targetContentOffset).y = isDirectionUp ? openOffset : self.bottomContentOffset; - } - else if (actualOffset > openOffset && targetOffset < openOffset) - { - self.state = State::Top; + targetContentOffset:(inout CGPoint *)targetContentOffset { + CGFloat actualOffset = scrollView.contentOffset.y; + CGFloat openOffset = self.openContentOffset; + CGFloat targetOffset = (*targetContentOffset).y; + CGFloat previewOffset = self.previewContentOffset; + CGFloat previewPlusOffset = self.previewPlusContentOffset; + BOOL isPreviewPlus = [self.delegate isPreviewPlus]; + + if (actualOffset > previewPlusOffset && actualOffset < openOffset) { + if (self.direction == MWMScrollDirectionUp) { + self.state = MWMOffsetStateOpen; + (*targetContentOffset).y = openOffset; + } else { + self.state = isPreviewPlus ? MWMOffsetStatePreviewPlus : MWMOffsetStatePreview; + (*targetContentOffset).y = isPreviewPlus ? previewPlusOffset : previewOffset; + } + } else if (actualOffset > previewOffset && actualOffset < previewPlusOffset) { + if (self.direction == MWMScrollDirectionUp) { + self.state = isPreviewPlus ? MWMOffsetStatePreviewPlus : MWMOffsetStateOpen; + (*targetContentOffset).y = isPreviewPlus ? previewPlusOffset : openOffset; + } else { + self.state = MWMOffsetStatePreview; + (*targetContentOffset).y = previewOffset; + } + } else if (actualOffset > openOffset && targetOffset < openOffset) { + self.state = MWMOffsetStateOpen; (*targetContentOffset).y = openOffset; - } - else if (actualOffset < self.bottomContentOffset) - { + } else if (actualOffset < previewOffset) { (*targetContentOffset).y = 0; - } - else - { - self.state = State::Top; + } else { + self.state = MWMOffsetStateOpen; } } -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate -{ +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView + willDecelerate:(BOOL)decelerate { if (decelerate) return; - auto const actualOffset = scrollView.contentOffset.y; - auto const openOffset = self.openContentOffset; + CGFloat actualOffset = scrollView.contentOffset.y; + CGFloat openOffset = self.openContentOffset; + CGFloat previewOffset = self.previewContentOffset; + CGFloat previewPlusOffset = self.previewPlusContentOffset; + BOOL isPreviewPlus = [self.delegate isPreviewPlus]; - if (actualOffset < self.bottomContentOffset + kLuftDraggingOffset) - { - self.state = State::Bottom; - place_page_layout::animate(^{ - [self setAnimatedContentOffset:self.bottomContentOffset]; - }); - } - else if (actualOffset < openOffset) - { - auto const isDirectionUp = self.direction == ScrollDirection::Up; - self.state = isDirectionUp ? State::Top : State::Bottom; + if (actualOffset < previewOffset + kLuftDraggingOffset) { + self.state = MWMOffsetStatePreview; place_page_layout::animate(^{ - [self setAnimatedContentOffset:isDirectionUp ? openOffset : self.bottomContentOffset]; + [self setAnimatedContentOffset:previewOffset]; }); - } - else - { - self.state = State::Top; + } else if (actualOffset < previewPlusOffset) { + if (self.direction == MWMScrollDirectionUp) { + self.state = isPreviewPlus ? MWMOffsetStatePreviewPlus : MWMOffsetStateOpen; + place_page_layout::animate(^{ + [self setAnimatedContentOffset:isPreviewPlus ? previewPlusOffset : openOffset]; + }); + } else { + self.state = MWMOffsetStatePreview; + place_page_layout::animate(^{ + [self setAnimatedContentOffset:previewOffset]; + }); + } + } else if (actualOffset < openOffset) { + if (self.direction == MWMScrollDirectionUp) { + self.state = MWMOffsetStateOpen; + place_page_layout::animate(^{ + [self setAnimatedContentOffset:openOffset]; + }); + } else { + self.state = isPreviewPlus ? MWMOffsetStatePreviewPlus : MWMOffsetStatePreview; + place_page_layout::animate(^{ + [self setAnimatedContentOffset:isPreviewPlus ? previewPlusOffset : previewOffset]; + }); + } + } else { + self.state = MWMOffsetStateOpen; } } -- (void)setState:(State)state -{ +- (void)setState:(MWMOffsetState)state { _state = state; - BOOL const isTop = state == State::Top; + BOOL isTop = state == MWMOffsetStateOpen; self.placePageView.anchorImage.transform = isTop ? CGAffineTransformMakeRotation(M_PI) : CGAffineTransformIdentity; [self.previewLayoutHelper layoutInOpenState:isTop]; @@ -282,26 +293,22 @@ CGFloat const kMinOffset = 1; #pragma mark - UITableViewDelegate -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section != 0) return; - auto cell = [tableView cellForRowAtIndexPath:indexPath]; - if ([cell isKindOfClass:[MWMAdBanner class]]) - { + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + if ([cell isKindOfClass:[MWMAdBanner class]]) { return; } CGFloat offset = 0; - if (self.state == State::Top) - { - self.state = State::Bottom; - offset = self.bottomContentOffset; - } - else - { - self.state = State::Top; + if (self.state == MWMOffsetStateOpen) { + BOOL isPreviewPlus = [self.delegate isPreviewPlus]; + self.state = isPreviewPlus ? MWMOffsetStatePreviewPlus : MWMOffsetStatePreview; + offset = isPreviewPlus ? self.previewPlusContentOffset : self.previewContentOffset; + } else { + self.state = MWMOffsetStateOpen; offset = self.topContentOffset; } @@ -312,22 +319,17 @@ CGFloat const kMinOffset = 1; #pragma mark - Properties -- (void)setAnimatedContentOffset:(CGFloat)offset -{ +- (void)setAnimatedContentOffset:(CGFloat)offset { self.isOffsetAnimated = YES; [self.scrollView setContentOffset:{0, offset} animated:YES]; } -- (void)setScrollView:(MWMPPScrollView *)scrollView -{ - if (scrollView) - { +- (void)setScrollView:(MWMPPScrollView *)scrollView { + if (scrollView) { scrollView.delegate = self; [scrollView addSubview:self.placePageView]; [self.ownerView addSubview:scrollView]; - } - else - { + } else { _scrollView.delegate = nil; [_scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; [_scrollView removeFromSuperview]; @@ -335,16 +337,13 @@ CGFloat const kMinOffset = 1; _scrollView = scrollView; } -- (void)setActionBar:(MWMPlacePageActionBar *)actionBar -{ - if (actionBar) - { - auto superview = self.ownerView; +- (void)setActionBar:(MWMPlacePageActionBar *)actionBar { + if (actionBar) { + UIView *superview = self.ownerView; [superview addSubview:actionBar]; NSLayoutXAxisAnchor * leadingAnchor = superview.leadingAnchor; NSLayoutXAxisAnchor * trailingAnchor = superview.trailingAnchor; - if (@available(iOS 11.0, *)) - { + if (@available(iOS 11.0, *)) { UILayoutGuide * safeAreaLayoutGuide = superview.safeAreaLayoutGuide; leadingAnchor = safeAreaLayoutGuide.leadingAnchor; trailingAnchor = safeAreaLayoutGuide.trailingAnchor; @@ -352,9 +351,7 @@ CGFloat const kMinOffset = 1; [actionBar.leadingAnchor constraintEqualToAnchor:leadingAnchor].active = YES; [actionBar.trailingAnchor constraintEqualToAnchor:trailingAnchor].active = YES; [actionBar setVisible:NO]; - } - else - { + } else { [_actionBar removeFromSuperview]; } _actionBar = actionBar; diff --git a/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.xib b/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.xib index dea0e7d84b..dd298c379b 100644 --- a/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.xib +++ b/iphone/Maps/UI/Search/TableView/MWMSearchCommonCell.xib @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> <device id="retina4_7" orientation="portrait"> <adaptation id="fullscreen"/> </device> <dependencies> <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> @@ -80,10 +80,10 @@ </userDefinedRuntimeAttributes> </view> <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uWz-7m-GUu"> - <rect key="frame" x="241" y="16" width="63" height="20"/> + <rect key="frame" x="262.5" y="16" width="41.5" height="20"/> <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Popular" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yjT-ah-SWQ"> - <rect key="frame" x="8" y="0.0" width="47" height="20"/> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TOP" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yjT-ah-SWQ"> + <rect key="frame" x="8" y="0.0" width="25.5" height="20"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.1176470588" green="0.58823529409999997" blue="0.93983289930000002" alpha="1" colorSpace="calibratedRGB"/> <nil key="highlightedColor"/> @@ -280,7 +280,7 @@ </userDefinedRuntimeAttributes> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="$$" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WOF-of-CqB"> - <rect key="frame" x="282.5" y="54.5" width="21.5" height="20.5"/> + <rect key="frame" x="282.5" y="54" width="21.5" height="20.5"/> <fontDescription key="fontDescription" type="system" pointSize="17"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> @@ -311,7 +311,7 @@ </userDefinedRuntimeAttributes> </view> <imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" image="ic_hot_offer" translatesAutoresizingMaskIntoConstraints="NO" id="eHM-Vf-w4R"> - <rect key="frame" x="307" y="56" width="20" height="18"/> + <rect key="frame" x="307" y="55.5" width="20" height="18"/> </imageView> </subviews> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> |