From 2b1b551878478f08a74f899bcd0396e8bc6fdf6d Mon Sep 17 00:00:00 2001 From: Alexander Boriskov Date: Thu, 16 Jul 2020 14:33:20 +0300 Subject: [PATCH] [iOS] Add new filter and map/list UI control https://jira.mail.ru/browse/MAPSME-14172 --- iphone/Maps/Core/Search/MWMSearch.h | 2 + iphone/Maps/Core/Search/MWMSearch.mm | 18 +- iphone/Maps/Core/Theme/SearchStyleSheet.swift | 49 ++-- .../ic_clear_filters.png | Bin 151 -> 0 bytes .../ic_clear_filters@2x.png | Bin 225 -> 0 bytes .../ic_clear_filters@3x.png | Bin 295 -> 0 bytes .../Cells/ic_filter.imageset/Contents.json | 6 +- .../Cells/ic_filter.imageset/Filter.png | Bin 0 -> 231 bytes .../Cells/ic_filter.imageset/Filter@2x.png | Bin 0 -> 299 bytes .../Cells/ic_filter.imageset/Filter@3x.png | Bin 0 -> 393 bytes .../Cells/ic_filter.imageset/ic_filter.png | Bin 172 -> 0 bytes .../Cells/ic_filter.imageset/ic_filter@2x.png | Bin 250 -> 0 bytes .../Cells/ic_filter.imageset/ic_filter@3x.png | Bin 410 -> 0 bytes .../Contents.json | 6 +- .../ic_search_mode_list.imageset/Manager.png | Bin 0 -> 251 bytes .../Manager@2x.png | Bin 0 -> 378 bytes .../Manager@3x.png | Bin 0 -> 436 bytes .../ic_search_mode_map.imageset/Contents.json | 26 ++ .../Cells/ic_search_mode_map.imageset/Map.png | Bin 0 -> 288 bytes .../ic_search_mode_map.imageset/Map@2x.png | Bin 0 -> 410 bytes .../ic_search_mode_map.imageset/Map@3x.png | Bin 0 -> 643 bytes iphone/Maps/Maps.xcodeproj/project.pbxproj | 10 +- .../Maps/UI/Search/Filters/MWMHotelParams.h | 1 + .../Maps/UI/Search/Filters/MWMHotelParams.mm | 21 ++ .../Maps/UI/Search/MWMSearchChangeModeView.h | 7 - .../Maps/UI/Search/MWMSearchChangeModeView.mm | 78 ------ .../Maps/UI/Search/MWMSearchManager+Filter.mm | 6 +- .../Maps/UI/Search/MWMSearchManager+Layout.m | 68 ++++- iphone/Maps/UI/Search/MWMSearchManager.mm | 82 +++--- iphone/Maps/UI/Search/MWMSearchView.xib | 263 +++++++++--------- .../Maps/UI/Search/SearchActionBarView.swift | 74 +++++ .../TableView/MWMSearchTableViewController.mm | 1 + iphone/Maps/UI/Storyboard/Main.storyboard | 130 ++++----- 33 files changed, 461 insertions(+), 387 deletions(-) delete mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters.png delete mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters@2x.png delete mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters@3x.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Filter.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Filter@2x.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Filter@3x.png delete mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/ic_filter.png delete mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/ic_filter@2x.png delete mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/ic_filter@3x.png rename iphone/Maps/Images.xcassets/Search/Cells/{ic_clear_filters.imageset => ic_search_mode_list.imageset}/Contents.json (71%) create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_list.imageset/Manager.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_list.imageset/Manager@2x.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_list.imageset/Manager@3x.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Map.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Map@2x.png create mode 100644 iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Map@3x.png delete mode 100644 iphone/Maps/UI/Search/MWMSearchChangeModeView.h delete mode 100644 iphone/Maps/UI/Search/MWMSearchChangeModeView.mm create mode 100644 iphone/Maps/UI/Search/SearchActionBarView.swift diff --git a/iphone/Maps/Core/Search/MWMSearch.h b/iphone/Maps/Core/Search/MWMSearch.h index c0864c98f3..d2c7323ee3 100644 --- a/iphone/Maps/Core/Search/MWMSearch.h +++ b/iphone/Maps/Core/Search/MWMSearch.h @@ -40,6 +40,8 @@ struct ProductInfo; + (BOOL)isHotelResults; + (BOOL)hasFilter; ++ (BOOL)hasAvailability; ++ (int)filterCount; + (MWMHotelParams *)getFilter; + (void)clearFilter; diff --git a/iphone/Maps/Core/Search/MWMSearch.mm b/iphone/Maps/Core/Search/MWMSearch.mm index 50d99c24ac..27e5284135 100644 --- a/iphone/Maps/Core/Search/MWMSearch.mm +++ b/iphone/Maps/Core/Search/MWMSearch.mm @@ -358,9 +358,21 @@ booking::filter::Tasks MakeBookingFilterTasks(booking::filter::Params && availab auto filter = [MWMSearch manager].filter; if (!filter) return NO; - auto const hasRules = [filter rules] != nullptr; - auto const hasBookingParams = ![filter availabilityParams].IsEmpty(); - return hasRules || hasBookingParams; + return [filter rules] != nullptr; +} + ++ (BOOL)hasAvailability { + auto filter = [MWMSearch manager].filter; + if (!filter) + return NO; + return !filter.availabilityParams.IsEmpty(); +} ++ (int)filterCount { + auto filter = [MWMSearch manager].filter; + if (filter && [filter rules]) { + return [filter rulesCount]; + } + return 0; } + (MWMHotelParams *)getFilter diff --git a/iphone/Maps/Core/Theme/SearchStyleSheet.swift b/iphone/Maps/Core/Theme/SearchStyleSheet.swift index 1693933864..40faf76bd2 100644 --- a/iphone/Maps/Core/Theme/SearchStyleSheet.swift +++ b/iphone/Maps/Core/Theme/SearchStyleSheet.swift @@ -33,43 +33,28 @@ class SearchStyleSheet: IStyleSheet { s.shadowOpacity = 1 s.shadowOffset = CGSize.zero } - - theme.add(styleName: "SearchFilterButtonActive") { (s) -> (Void) in + + theme.add(styleName: "SearchActionBarView") { (s) -> (Void) in s.backgroundColor = colors.linkBlue - s.backgroundColorHighlighted = colors.linkBlueHighlighted - s.fontColor = colors.white - s.cornerRadius = 4 - s.font = fonts.regular17 - } - - theme.add(styleName: "SearchFilterButtonInActive") { (s) -> (Void) in - s.backgroundColor = colors.clear - s.backgroundColorHighlighted = colors.clear - s.fontColor = colors.linkBlue - s.cornerRadius = 4 - s.font = fonts.regular17 - } - - theme.add(styleName: "SearchCancelButtonActive") { (s) -> (Void) in - s.tintColor = colors.white - s.image = "ic_clear_filters" - s.coloring = MWMButtonColoring.white - } - - theme.add(styleName: "SearchCancelButtonInActive") { (s) -> (Void) in - s.tintColor = colors.linkBlueHighlighted - s.image = "ic_filter" - s.coloring = MWMButtonColoring.blue - } - - theme.add(styleName: "SearchChangeModeView") { (s) -> (Void) in - s.backgroundColor = colors.pressBackground - s.shadowRadius = 2 + s.cornerRadius = 20 + s.shadowRadius = 1 s.shadowColor = UIColor(0, 0, 0, 0.24); - s.shadowOffset = CGSize.zero + s.shadowOffset = CGSize(width: 0, height: 2) s.shadowOpacity = 1 } + theme.add(styleName: "SearchActionBarButton") { (s) -> (Void) in + s.backgroundColor = colors.clear + s.fontColor = colors.whitePrimaryText + s.font = fonts.semibold14 + s.coloring = .whiteText + } + + theme.add(styleName: "SearchFilterAppliedIndicator") { (s) -> (Void) in + s.round = true + s.clip = true + } + theme.add(styleName: "SearchSearchTextField") { (s) -> (Void) in s.fontColor = colors.blackSecondaryText s.backgroundColor = colors.white diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters.png deleted file mode 100644 index 9babc889425201c2f846ae332337dc28e145b772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8oTrOph{y4_msj&LDDb!jPJ1Et z=Digwb1X|68*6P}+|8EBAF|i3S`||wW4)~H@_Pk#wT>N@kZppju6?VCyfA6r=H*fR3`9|IgXcL2{tDnm{r-UW|ryw@@ diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters@2x.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters@2x.png deleted file mode 100644 index 2c24efc209035f62ab6c013d235c8c9920d4a026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawR(QHNhGg7(d)=C=!9c(@ko)=! z*<}U2V&|P44eFM8KI8m;rE%v2^^+!yK*b06Gr~eS*XymC_4}F5q-znAy23oYkE?{f zW%6|IQ@L8__|R^U8v#bALZvnPaA4yWI2C`JF13 zPfR?2T9!Gc^`CjO)a>`0vvoab(d{>%WtIIguwF1zHt{Xr&${ah+q)Ot4V3~~%pjLr Wy(9MjCl;Pu5YN-q&t;ucLK6VwkzL9F diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters@3x.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_clear_filters.imageset/ic_clear_filters@3x.png deleted file mode 100644 index 73ee25b940d766295c112549596c904054e372a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{P!cb+beAr*{o?=-R=tZd{+qc|DrNdmfD|0U%;p!2S@ZNGD zViD^xAzg!M8I2oVxO-Hi5_B#yC3lL6d2iVOlsY1$t1>O)=0+D`Z-W|@F4bAMUHx3vIVCg!0D?$vZ2$lO diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Contents.json b/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Contents.json index f639a489e2..5046823175 100644 --- a/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Contents.json +++ b/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Contents.json @@ -2,17 +2,17 @@ "images" : [ { "idiom" : "universal", - "filename" : "ic_filter.png", + "filename" : "Filter.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "ic_filter@2x.png", + "filename" : "Filter@2x.png", "scale" : "2x" }, { "idiom" : "universal", - "filename" : "ic_filter@3x.png", + "filename" : "Filter@3x.png", "scale" : "3x" } ], diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Filter.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Filter.png new file mode 100644 index 0000000000000000000000000000000000000000..38c83804c46ac0e91e31453b1aee533572fe8312 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6l5$8 za(7}_cTVOdki(Mh=i z1E<9SCO)rng`15V`wE-(rbN#Ax97_Rrv1%-oLnOIi)HG#n9Osn6--!Sc(?5Cl%)2= zgBn{;_5>XhW(soS)0$y>Q|xqj#mx7d-y;-UU!>IPq=;HYE;rw;Bpy4}F}~TUgV|#G WYOWO%f)4=Q!QkoY=d#Wzp$P!?>qrOy literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Filter@2x.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/Filter@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5f6fa063a4461ba1aaa6889d07a985140bdfd4 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#S9E$svykh8Km+7D9BhG zpvj1y9C)`v%lXRn8AX4 zhM%@~cq%g)&KHo~%gqZ{gbZk~? pFtTZCQj!R5Z=J$!z6rw zBj*6u0fh~mZ`o3rns~of2hFx3Nwj6lO0HVPbST+aV*Pi5amS>HE~ zb(f~;XMb9mKPyeNxWKWr;;5Vt=e-XlPx^E2nSCqx;>8{J+B9D7N&43P8~2=xeZxGd zsde#-CpRvtMBO{mH23+3L(`KbV(qRO+|s+IaLX=CwBwubY9qJb-Jz0;{vKP!x%lt# zRh)~S3$OmyF)x0Nl%VbXh@*_VTOJ6fhMj)?FoR>AY*TjogIkI_%0Nus*2GPp%G#q( zo$=mq=ce}moT9~NY*@12%;WkX5Tg?o!5;5*jO+A+M;i}m-B1aOV3~bX?BIPDy~=kF izkgq34Dz1CQoA|lnArR;h|k1|%Oc%$NbB7>k44ofy`glX(f`qFVdQ&MBb@08r36NB{r; diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/ic_filter@2x.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/ic_filter@2x.png deleted file mode 100644 index 58e41e0056b482b38a908963f128ee728c484618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|ws^WYhEy=V zy=KUDK!Jxf;O*b{IkH@OoC}>do;a;?U-60WepBZL21X_p4gm!ROvZzn#(l4k7^Yu; zmythT_-VMvsc8%gQU&)hwCXs4^%OKY+>k4m`&N4RoK$hyX1OURZ7dZWS{w2qvTF{! zpH-q7Yx;J(@6KDxHN>167(|)&abmR#YI}zHL}MPY+g$b~K=(6vy85}Sb4q9e0JMck AbpQYW diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/ic_filter@3x.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_filter.imageset/ic_filter@3x.png deleted file mode 100644 index d93eba55eac301d7a7bb2f4b8dc0d7f3c1c2224b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJ#^NA%Cx&(BWL^ToV1>L`Y@$m)@0R@K!21X_pvKa;Q5A1lqqEfx~ zyy^Sw+I=SHrj~v_$+hRbs=|i2$|ZL>bW~r3!kIznmgOiJ8F=XZq6*T?ZL@M4?ES=?6Dr1}-6ZH1-)sWDf!o3H?*aK|i x5<)i~{mK+AqD|C39RfE44f7W zDhnDGFsL*z%QP@QTkuCU+Q{Oo#iYGYQe(H9Mg}kP*kMr2>^~zqe_HTvtCiuO8)gT2 z&2H*QpE0p#Ze4Q`|C(1s68-J>V#1%4go) zBy8bS%Hm$YRN7R=V%_MMVBKiAQC;S^?6wKbc2AlM+~0W>HU8mkSftUlsH3?fds&@w0TjahiN{i#iBzW>pV;@TvW zvh&wQkyJjG*)39yvlIB8C(qey{7qcp{KO<%_q$6}c~|S=yvGJB>b7#u zZJequ`P$o2_LSs+tp0^*`-RmzX8Dz>Rzz19`UHr$28tBgWiR)r UH#wo_1Pm$$Pgg&ebxsLQ0OD+soB#j- literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_list.imageset/Manager@3x.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_list.imageset/Manager@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec1b9d8a15c7fe46b5882a2883301ab974321e6 GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8oCO|{#S9FJ79h;%I?XTvD9BhG zR z{;4>#dwpThkH8|i$zi{yPf=UDedj+0hUo`BMQ9ZZEwA-HcRHuO`mFg{n~p68X3wIY zC$GKpB;@6-)lv0nhn)V*2fF;zgrP=z-VE^xm X*DGCdbz8_*9uU{l)z4*}Q$iB}oBhBi literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Contents.json b/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Contents.json new file mode 100644 index 0000000000..33ad5d68c4 --- /dev/null +++ b/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Map.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Map@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Map@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Map.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Map.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e65feb57aca42f88304d2f628bb4f386235cad GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`j)FbFd;%$g$s6l5$8 za(7}_cTVOdki(Mh=FnoAe@{%CBOJ!ea1yx)Vz(=s+DK9kAV?e?s1fyCq( z$D@C19B-bQYpMKw`-C@V4%-}*{bRFpzTXVXbF~i^XD_|NDzm}9QT)b549yrS;%~3cn=bGEJ47q2-MH_dnL#?6`nLW{-papY&fN|_{=VSpxz-lf hH`jyaZ>e0)SYLCsZsqQ-??4YQc)I$ztaD0e0sw5@a3BBx literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Map@2x.png b/iphone/Maps/Images.xcassets/Search/Cells/ic_search_mode_map.imageset/Map@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b895eccd7c9fe4c66328ec472b7b55d1d7304d GIT binary patch literal 410 zcmV;L0cHM)P)i2@W~?jKq)oq$i|cKYy4% zc8DCusS7g)wu45gWdkYHR+P;*_VnR^$YZgGpxA<5guSlRmE`3+eQUh}ZM{`>`%f2BEWsvGi z!b%i9OZkh7`>O9??YVT-o3GR^fHsrR7V4W`EW%Tcu&C zM5OeZsNimO{NvfniCi=EtZHl>AmF1`#m=rpF9!NzPZ`-e(qY;BFBX{6n6G) z>fNJ!^L{|Fi(Mv=$9}JnvuJP1`knK9`P9yQy`*{5Ua6q_OSp&E-OskK`&MY?q-}nZ zc4DjbRqpYI5(c$^hQ)t>Hmk196Oz# zT@gIk8mnMi`o#al33t_18@QLqyUOimKOt$fl%qr~hVdnTici|k(`UN>%wf8?vw(Gp zYVn&s%?CmMO%H7hcz7ic4@#WBp_18Sf9HOYKE|2suly%WdpmunP5rw`6O895Z$BYz z+ipUx_q zGoy-=WA7gddNcRTCtKCeNjYx2PuowPXus_5Yp-Qjp1I1rzxPSuZ=kRluf|@{<14Go z#J=sei?Axyzv=FLOYGrN(H%}*vi<6@mX{WmzvtP}o8o5|sT?EvX1nF;nC)rules; +- (int)rulesCount; - (booking::filter::Params)availabilityParams; @end diff --git a/iphone/Maps/UI/Search/Filters/MWMHotelParams.mm b/iphone/Maps/UI/Search/Filters/MWMHotelParams.mm index 6aeecc191d..c33aab66d5 100644 --- a/iphone/Maps/UI/Search/Filters/MWMHotelParams.mm +++ b/iphone/Maps/UI/Search/Filters/MWMHotelParams.mm @@ -66,6 +66,27 @@ static int8_t kAgeOfChild = 5; return And(And(ratingRule, priceRule), typeRule); } +- (int)rulesCount { + int result = 0; + using namespace search::hotels_filter; + using namespace place_page::rating; + + if (self.rating != FilterRating::Any) { + result += 1; + } + + for (auto const filter : self.price) { + if (filter != Price::Any) { + result += 1; + break; + } + } + + result += self.types.size(); + + return result; +} + unsigned makeMask(std::unordered_set const & items) { unsigned mask = 0; diff --git a/iphone/Maps/UI/Search/MWMSearchChangeModeView.h b/iphone/Maps/UI/Search/MWMSearchChangeModeView.h deleted file mode 100644 index 4d4b83b5cc..0000000000 --- a/iphone/Maps/UI/Search/MWMSearchChangeModeView.h +++ /dev/null @@ -1,7 +0,0 @@ -#import "MWMSearchTableViewController.h" - -@interface MWMSearchChangeModeView : UIView - -- (void)updateForState:(MWMSearchManagerState)state; - -@end diff --git a/iphone/Maps/UI/Search/MWMSearchChangeModeView.mm b/iphone/Maps/UI/Search/MWMSearchChangeModeView.mm deleted file mode 100644 index 0009ab5561..0000000000 --- a/iphone/Maps/UI/Search/MWMSearchChangeModeView.mm +++ /dev/null @@ -1,78 +0,0 @@ -#import "MWMSearchChangeModeView.h" -#import "MWMButton.h" -#import "UIButton+RuntimeAttributes.h" -#import "SwiftBridge.h" - -@interface MWMSearchChangeModeView () - -@property(weak, nonatomic) IBOutlet UIButton * changeModeButton; - -@property(weak, nonatomic) IBOutlet UIButton * filterButton; -@property(weak, nonatomic) IBOutlet MWMButton * cancelFilterButton; -@property(weak, nonatomic) IBOutlet NSLayoutConstraint * filterButtoniPadX; -@property(weak, nonatomic) IBOutlet UIView * changeModeBackground; - -@end - -@implementation MWMSearchChangeModeView - -- (void)awakeFromNib -{ - [super awakeFromNib]; - [MWMSearch addObserver:self]; - self.changeModeButton.titleLabel.textAlignment = NSTextAlignmentNatural; - self.filterButton.titleLabel.textAlignment = NSTextAlignmentNatural; - self.filterButtoniPadX.priority = IPAD ? UILayoutPriorityDefaultHigh : UILayoutPriorityDefaultLow; -} - -- (void)updateForState:(MWMSearchManagerState)state -{ - UIButton * changeModeButton = self.changeModeButton; - if (IPAD) - { - changeModeButton.hidden = YES; - return; - } - switch (state) - { - case MWMSearchManagerStateTableSearch: - [self setStyleAndApply: @"PressBackground"]; - [changeModeButton setTitle:L(@"search_show_on_map") forState:UIControlStateNormal]; - break; - case MWMSearchManagerStateMapSearch: - [self setStyleAndApply: @"Background"]; - [changeModeButton setTitle:L(@"search_in_table") forState:UIControlStateNormal]; - break; - default: break; - } -} - -- (void)updateFilterButtons:(BOOL)isFilterResults -{ - BOOL const hasFilter = [MWMSearch hasFilter]; - BOOL const hide = !(isFilterResults || hasFilter); - self.filterButton.hidden = hide; - self.cancelFilterButton.hidden = hide; - if (hide) - return; - if (hasFilter) - { - [self.filterButton setStyleAndApply:@"SearchFilterButtonActive"]; - [self.cancelFilterButton setStyleAndApply:@"SearchCancelButtonActive"]; - [self bringSubviewToFront:self.cancelFilterButton]; - } - else - { - [self.filterButton setStyleAndApply:@"SearchFilterButtonInActive"]; - [self.cancelFilterButton setStyleAndApply:@"SearchCancelButtonInActive"]; - [self sendSubviewToBack:self.cancelFilterButton]; - } - [self sendSubviewToBack:self.changeModeBackground]; -} - -#pragma mark - MWMSearchObserver - -- (void)onSearchStarted { [self updateFilterButtons:[MWMSearch isHotelResults]]; } -- (void)onSearchCompleted { [self updateFilterButtons:[MWMSearch isHotelResults]]; } - -@end diff --git a/iphone/Maps/UI/Search/MWMSearchManager+Filter.mm b/iphone/Maps/UI/Search/MWMSearchManager+Filter.mm index 7a45318ace..3ca2ab9e71 100644 --- a/iphone/Maps/UI/Search/MWMSearchManager+Filter.mm +++ b/iphone/Maps/UI/Search/MWMSearchManager+Filter.mm @@ -5,7 +5,7 @@ @interface MWMSearchManager () @property(weak, nonatomic, readonly) UIViewController * ownerController; -@property(weak, nonatomic) IBOutlet UIButton * actionBarViewFilterButton; +@property(weak, nonatomic) IBOutlet UIButton * actionBarView; @property(nonatomic, copy) MWMVoidBlock onFinishCallback; @@ -28,8 +28,8 @@ { navController.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController * popover = navController.popoverPresentationController; - popover.sourceView = self.actionBarViewFilterButton; - popover.sourceRect = self.actionBarViewFilterButton.bounds; + popover.sourceView = self.actionBarView; + popover.sourceRect = self.actionBarView.bounds; popover.permittedArrowDirections = UIPopoverArrowDirectionLeft; } diff --git a/iphone/Maps/UI/Search/MWMSearchManager+Layout.m b/iphone/Maps/UI/Search/MWMSearchManager+Layout.m index ed6c0ef6ff..d7fdb63747 100644 --- a/iphone/Maps/UI/Search/MWMSearchManager+Layout.m +++ b/iphone/Maps/UI/Search/MWMSearchManager+Layout.m @@ -3,6 +3,8 @@ #import static CGFloat const kWidthForiPad = 320.0; +static CGFloat const changeModeViewOffsetNormal = -24; +static CGFloat const changeModeViewOffsetKeyboard = -12; @interface MWMSearchManager () @@ -10,7 +12,9 @@ static CGFloat const kWidthForiPad = 320.0; @property(nonatomic) IBOutlet UIView * actionBarView; @property(nonatomic) IBOutlet UIView * contentView; -@property(nonatomic) NSLayoutConstraint * actionBarViewBottom; +@property(nonatomic) NSLayoutConstraint * contentViewTopHidden; +@property(nonatomic) NSLayoutConstraint * actionBarViewBottomKeyboard; +@property(nonatomic) NSLayoutConstraint * actionBarViewBottomNormal; @property(weak, nonatomic, readonly) UIView * searchViewContainer; @@ -21,12 +25,12 @@ static CGFloat const kWidthForiPad = 320.0; - (void)layoutTopViews { UIView * searchBarView = self.searchBarView; - UIView * actionBarView = self.actionBarView; + UIView * changeModeView = self.actionBarView; UIView * contentView = self.contentView; UIView * parentView = self.searchViewContainer; searchBarView.translatesAutoresizingMaskIntoConstraints = NO; - actionBarView.translatesAutoresizingMaskIntoConstraints = NO; + changeModeView.translatesAutoresizingMaskIntoConstraints = NO; contentView.translatesAutoresizingMaskIntoConstraints = NO; NSLayoutXAxisAnchor * leadingAnchor = parentView.leadingAnchor; @@ -41,29 +45,63 @@ static CGFloat const kWidthForiPad = 320.0; else [searchBarView.trailingAnchor constraintEqualToAnchor:trailingAnchor].active = YES; - NSLayoutConstraint * actionBarViewTop = - [actionBarView.topAnchor constraintEqualToAnchor:searchBarView.bottomAnchor]; - actionBarViewTop.priority = UILayoutPriorityDefaultLow + 10; - actionBarViewTop.active = YES; + [changeModeView.centerXAnchor constraintEqualToAnchor:parentView.centerXAnchor].active = YES; + self.actionBarViewBottomNormal = [changeModeView.bottomAnchor constraintEqualToAnchor:bottomAnchor constant:changeModeViewOffsetNormal]; + self.actionBarViewBottomNormal.priority = UILayoutPriorityDefaultLow + 10; + self.actionBarViewBottomNormal.active = YES; - [actionBarView.leadingAnchor constraintEqualToAnchor:searchBarView.leadingAnchor].active = YES; - [actionBarView.trailingAnchor constraintEqualToAnchor:searchBarView.trailingAnchor].active = YES; - self.actionBarViewBottom = [actionBarView.bottomAnchor constraintEqualToAnchor:bottomAnchor]; - self.actionBarViewBottom.priority = UILayoutPriorityDefaultLow; - self.actionBarViewBottom.active = YES; + self.actionBarViewBottomKeyboard = [changeModeView.bottomAnchor constraintEqualToAnchor:parentView.bottomAnchor constant:changeModeViewOffsetKeyboard]; + self.actionBarViewBottomKeyboard.priority = UILayoutPriorityDefaultLow; + self.actionBarViewBottomKeyboard.active = YES; NSLayoutConstraint * contentViewTop = - [contentView.topAnchor constraintEqualToAnchor:actionBarView.bottomAnchor]; - contentViewTop.priority = UILayoutPriorityDefaultLow; + [contentView.topAnchor constraintEqualToAnchor:searchBarView.bottomAnchor]; + contentViewTop.priority = UILayoutPriorityDefaultLow+10; contentViewTop.active = YES; NSLayoutConstraint * contentViewBottom = - [contentView.bottomAnchor constraintEqualToAnchor:bottomAnchor]; + [contentView.bottomAnchor constraintEqualToAnchor:parentView.bottomAnchor]; contentViewBottom.priority = UILayoutPriorityDefaultLow + 10; contentViewBottom.active = YES; + self.contentViewTopHidden = [contentView.topAnchor constraintEqualToAnchor:parentView.bottomAnchor]; + self.contentViewTopHidden.priority = UILayoutPriorityDefaultLow; + self.contentViewTopHidden.active = YES; + [contentView.leadingAnchor constraintEqualToAnchor:searchBarView.leadingAnchor].active = YES; [contentView.trailingAnchor constraintEqualToAnchor:searchBarView.trailingAnchor].active = YES; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; +} + +#pragma mark - keyboard movements +- (void)keyboardWillShow:(NSNotification *)notification +{ + CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; + CGFloat offset = IPAD ? changeModeViewOffsetNormal : changeModeViewOffsetKeyboard; + if (self.actionBarView.isHidden) { + self.actionBarViewBottomKeyboard.constant = -keyboardSize.height+offset; + self.actionBarViewBottomKeyboard.priority = UILayoutPriorityDefaultHigh; + } else { + [UIView animateWithDuration:kDefaultAnimationDuration animations:^{ + self.actionBarViewBottomKeyboard.constant = -keyboardSize.height+offset; + self.actionBarViewBottomKeyboard.priority = UILayoutPriorityDefaultHigh; + [self.actionBarView.superview layoutIfNeeded]; + }]; + } +} + +-(void)keyboardWillHide:(NSNotification *)notification +{ + if (self.actionBarView.isHidden) { + self.actionBarViewBottomKeyboard.priority = UILayoutPriorityDefaultLow; + } else { + [UIView animateWithDuration:kDefaultAnimationDuration animations:^{ + self.actionBarViewBottomKeyboard.priority = UILayoutPriorityDefaultLow; + [self.actionBarView.superview layoutIfNeeded]; + }]; + } } @end diff --git a/iphone/Maps/UI/Search/MWMSearchManager.mm b/iphone/Maps/UI/Search/MWMSearchManager.mm index 4d789c256d..134650c549 100644 --- a/iphone/Maps/UI/Search/MWMSearchManager.mm +++ b/iphone/Maps/UI/Search/MWMSearchManager.mm @@ -4,7 +4,7 @@ #import "MWMNoMapsViewController.h" #import "MWMRoutePoint+CPP.h" #import "MWMRouter.h" -#import "MWMSearchChangeModeView.h" +#import "MWMSearchTableViewController.h" #import "MWMSearchManager+Filter.h" #import "MWMSearchManager+Layout.h" #import "MapViewController.h" @@ -38,23 +38,16 @@ using Observers = NSHashTable; @property(weak, nonatomic, readonly) UIViewController *ownerController; @property(weak, nonatomic, readonly) UIView *searchViewContainer; @property(weak, nonatomic, readonly) UIView *actionBarContainer; +@property(weak, nonatomic, readonly) MWMMapViewControlsManager *controlsManager; @property(nonatomic) IBOutlet SearchBar *searchBarView; - -@property(nonatomic) IBOutlet UIView *actionBarView; - -@property(weak, nonatomic) IBOutlet NSLayoutConstraint *actionBarViewHeight; -@property(nonatomic) MWMSearchManagerActionBarState actionBarState; -@property(weak, nonatomic) IBOutlet UIButton *actionBarViewFilterButton; -@property(nonatomic) IBOutlet UIView *tabBarView; -@property(weak, nonatomic) IBOutlet NSLayoutConstraint *tabBarViewHeight; -@property(nonatomic) IBOutlet MWMSearchChangeModeView *changeModeView; -@property(weak, nonatomic) IBOutlet NSLayoutConstraint *changeModeViewHeight; -@property(weak, nonatomic) IBOutlet UIButton *filterButton; - +@property(weak, nonatomic) IBOutlet SearchActionBarView* actionBarView; @property(nonatomic) IBOutlet UIView *contentView; +@property (strong, nonatomic) IBOutlet UIView *tableViewContainer; -@property(nonatomic) NSLayoutConstraint *actionBarViewBottom; +@property(nonatomic) NSLayoutConstraint * contentViewTopHidden; +@property(nonatomic) NSLayoutConstraint * actionBarViewBottomKeyboard; +@property(nonatomic) NSLayoutConstraint * actionBarViewBottomNormal; @property(nonatomic) UINavigationController *navigationController; @property(nonatomic) MWMSearchTableViewController *tableViewController; @@ -227,17 +220,22 @@ using Observers = NSHashTable; self.routingTooltipSearch = MWMSearchManagerRoutingTooltipSearchNone; [self endSearch]; + MWMMapViewControlsManager* controlsManager = self.controlsManager; + controlsManager.menuState = controlsManager.menuRestoreState; [self viewHidden:YES]; } - (void)changeToDefaultState { + MWMMapViewControlsManager* controlsManager = self.controlsManager; + [self.navigationController popToRootViewControllerAnimated:NO]; self.searchBarView.state = SearchBarStateReady; GetFramework().DeactivateMapSelection(true); [self animateConstraints:^{ - self.actionBarViewBottom.priority = UILayoutPriorityDefaultLow; + self.contentViewTopHidden.priority = UILayoutPriorityDefaultLow; }]; + controlsManager.menuState = controlsManager.menuRestoreState; [self viewHidden:NO]; self.searchBarView.isBookingSearchViewHidden = ![MWMSearch isHotelResults]; self.actionBarState = MWMSearchManagerActionBarStateHidden; @@ -246,11 +244,14 @@ using Observers = NSHashTable; } - (void)changeToTableSearchState { + MWMMapViewControlsManager* controlsManager = self.controlsManager; + [self.navigationController popToRootViewControllerAnimated:NO]; self.searchBarView.state = SearchBarStateReady; GetFramework().DeactivateMapSelection(true); [self updateTableSearchActionBar]; + controlsManager.menuState = controlsManager.menuRestoreState; [self viewHidden:NO]; [MWMSearch setSearchOnMap:NO]; [self.tableViewController reloadData]; @@ -266,11 +267,12 @@ using Observers = NSHashTable; self.actionBarState = MWMSearchManagerActionBarStateModeFilter; if (!IPAD) { [self animateConstraints:^{ - self.actionBarViewBottom.priority = UILayoutPriorityDefaultHigh; + self.contentViewTopHidden.priority = UILayoutPriorityDefaultHigh; }]; } auto const navigationManagerState = [MWMNavigationDashboardManager sharedManager].state; [self viewHidden:navigationManagerState != MWMNavigationDashboardStateHidden]; + self.controlsManager.menuState = MWMBottomMenuStateHidden; [MWMSearch setSearchOnMap:YES]; [self.tableViewController reloadData]; @@ -289,7 +291,7 @@ using Observers = NSHashTable; self.actionBarState = MWMSearchManagerActionBarStateModeFilter; if (!IPAD) { [self animateConstraints:^{ - self.actionBarViewBottom.priority = UILayoutPriorityDefaultHigh; + self.contentViewTopHidden.priority = UILayoutPriorityDefaultHigh; }]; } auto const navigationManagerState = [MWMNavigationDashboardManager sharedManager].state; @@ -321,19 +323,24 @@ using Observers = NSHashTable; } else { self.searchBarView.state = SearchBarStateReady; } + + self.searchBarView.isBookingSearchViewHidden = !([MWMSearch isHotelResults] || [MWMSearch hasAvailability]); + [self.actionBarView updateFilterButtonWithShowFilter:[MWMSearch isHotelResults] || [MWMSearch hasFilter] + filterCount:[MWMSearch filterCount]]; if (self.state != MWMSearchManagerStateTableSearch) return; [self.tableViewController onSearchCompleted]; [self updateTableSearchActionBar]; - self.searchBarView.isBookingSearchViewHidden = ![MWMSearch isHotelResults]; } - (void)onSearchStarted { self.searchBarView.state = SearchBarStateSearching; + self.searchBarView.isBookingSearchViewHidden = !([MWMSearch isHotelResults] || [MWMSearch hasAvailability]); + [self.actionBarView updateFilterButtonWithShowFilter:[MWMSearch isHotelResults] || [MWMSearch hasFilter] + filterCount:[MWMSearch filterCount]]; if (self.state != MWMSearchManagerStateTableSearch) return; self.actionBarState = MWMSearchManagerActionBarStateModeFilter; - self.searchBarView.isBookingSearchViewHidden = ![MWMSearch isHotelResults]; } - (void)onSearchResultsUpdated { @@ -354,7 +361,7 @@ using Observers = NSHashTable; self.actionBarState = hideActionBar ? MWMSearchManagerActionBarStateHidden : MWMSearchManagerActionBarStateModeFilter; - self.actionBarViewBottom.priority = UILayoutPriorityDefaultLow; + self.contentViewTopHidden.priority = UILayoutPriorityDefaultLow; }]; } @@ -482,7 +489,7 @@ didSelectStartDate:(NSDate *)startDate break; } [self onSearchManagerStateChanged]; - [self.changeModeView updateForState:state]; + [self.actionBarView updateForState:state]; [[MapViewController sharedController] updateStatusBarStyle]; } @@ -491,18 +498,17 @@ didSelectStartDate:(NSDate *)startDate UIView *actionBarView = self.actionBarView; UIView *contentView = self.contentView; UIView *parentView = self.searchViewContainer; - UIView *actionBarContaner = self.actionBarContainer; if (!hidden) { if (searchBarView.superview) { [parentView bringSubviewToFront:searchBarView]; - [actionBarContaner bringSubviewToFront:actionBarView]; [parentView bringSubviewToFront:contentView]; + [parentView bringSubviewToFront:actionBarView]; return; } [parentView addSubview:searchBarView]; - [actionBarContaner addSubview:actionBarView]; [parentView addSubview:contentView]; + [parentView addSubview:actionBarView]; [self layoutTopViews]; } [UIView animateWithDuration:kDefaultAnimationDuration @@ -521,34 +527,16 @@ didSelectStartDate:(NSDate *)startDate }]; } -- (void)setChangeModeView:(MWMSearchChangeModeView *)changeModeView { - _changeModeView = changeModeView; - [changeModeView updateForState:self.state]; -} - - (void)setActionBarState:(MWMSearchManagerActionBarState)actionBarState { - _actionBarState = actionBarState; switch (actionBarState) { case MWMSearchManagerActionBarStateHidden: - self.tabBarView.hidden = YES; - self.changeModeView.hidden = YES; - self.actionBarViewHeight.priority = UILayoutPriorityDefaultHigh; - self.tabBarViewHeight.priority = UILayoutPriorityDefaultLow; - self.changeModeViewHeight.priority = UILayoutPriorityDefaultLow; + self.actionBarView.hidden = YES; break; case MWMSearchManagerActionBarStateTabBar: - self.tabBarView.hidden = NO; - self.changeModeView.hidden = YES; - self.actionBarViewHeight.priority = UILayoutPriorityDefaultLow; - self.tabBarViewHeight.priority = UILayoutPriorityDefaultHigh; - self.changeModeViewHeight.priority = UILayoutPriorityDefaultLow; + self.actionBarView.hidden = YES; break; case MWMSearchManagerActionBarStateModeFilter: - self.tabBarView.hidden = YES; - self.changeModeView.hidden = NO; - self.actionBarViewHeight.priority = UILayoutPriorityDefaultLow; - self.tabBarViewHeight.priority = UILayoutPriorityDefaultLow; - self.changeModeViewHeight.priority = UILayoutPriorityDefaultHigh; + self.actionBarView.hidden = NO; break; } } @@ -562,4 +550,8 @@ didSelectStartDate:(NSDate *)startDate - (UIView *)actionBarContainer { return [MapViewController sharedController].controlsView; } + +-(MWMMapViewControlsManager *)controlsManager { + return [MWMMapViewControlsManager manager]; +} @end diff --git a/iphone/Maps/UI/Search/MWMSearchView.xib b/iphone/Maps/UI/Search/MWMSearchView.xib index dbbdef8e59..7dd760e2c2 100644 --- a/iphone/Maps/UI/Search/MWMSearchView.xib +++ b/iphone/Maps/UI/Search/MWMSearchView.xib @@ -1,26 +1,20 @@ - - + - + - - - - - + - - - - + + + @@ -260,6 +254,7 @@ + @@ -276,142 +271,145 @@ - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - + - - - - - - - - - + + + + + - + + + + + + + + + + + + + + + @@ -424,22 +422,31 @@ + + + + + + + + + @@ -449,8 +456,10 @@ - + + + diff --git a/iphone/Maps/UI/Search/SearchActionBarView.swift b/iphone/Maps/UI/Search/SearchActionBarView.swift new file mode 100644 index 0000000000..c26e4e436b --- /dev/null +++ b/iphone/Maps/UI/Search/SearchActionBarView.swift @@ -0,0 +1,74 @@ +@objc class SearchActionBarView: SolidTouchView { + @IBOutlet private var filterButton: MWMButton! + @IBOutlet private var changeFilterButton: MWMButton! + @IBOutlet private var changeFilterView: UIView! + @IBOutlet private var filterAppliedLabel: UILabel! + @IBOutlet private var mapButton: MWMButton! + @IBOutlet private var listButton: MWMButton! + @IBOutlet private var filterDivider: UIView! + @IBOutlet private var stackView: UIStackView! + + override func awakeFromNib() { + super.awakeFromNib() + + hideView(filterButton, isHidden: true, animated: false) + hideView(changeFilterView, isHidden: true, animated: false) + hideView(mapButton, isHidden: true, animated: false) + hideView(listButton, isHidden: true, animated: false) + hideView(filterDivider, isHidden: true, animated: false) + } + + @objc func updateForState(_ state: MWMSearchManagerState) { + hideView(mapButton, isHidden: true, animated: false) + hideView(listButton, isHidden: true, animated: false) + + iPhoneSpecific { + switch state { + case .tableSearch: + hideView(mapButton, isHidden: false, animated: true) + case .mapSearch: + hideView(listButton, isHidden: false, animated: true) + case .default: + break + @unknown default: + break + } + } + } + + @objc func updateFilterButton(showFilter:Bool, filterCount: Int){ + filterAppliedLabel.text = "\(filterCount)" + if showFilter { + hideView(filterButton, isHidden: filterCount > 0, animated: true) + hideView(changeFilterView, isHidden: filterCount == 0, animated: true) + hideView(filterDivider, isHidden: listButton.isHidden && mapButton.isHidden, animated: false) + } else { + hideView(filterButton, isHidden: true, animated: false) + hideView(changeFilterView, isHidden: true, animated: false) + hideView(filterDivider, isHidden: true, animated: false) + } + } + + private func hideView(_ view: UIView, isHidden: Bool, animated: Bool) { + view.isHidden = isHidden + if animated { + UIView.animate(withDuration: kDefaultAnimationDuration/2, + delay: 0, + options: [.beginFromCurrentState], + animations: { + self.layoutIfNeeded() + }, completion: {complete in + if complete { + UIView.animate(withDuration: kDefaultAnimationDuration/2, + delay: 0, options: [.beginFromCurrentState], + animations: { + view.alpha = isHidden ? 0 : 1 + }, completion: nil) + } + }) + } else { + view.alpha = isHidden ? 0 : 1 + view.isHidden = isHidden + } + } +} diff --git a/iphone/Maps/UI/Search/TableView/MWMSearchTableViewController.mm b/iphone/Maps/UI/Search/TableView/MWMSearchTableViewController.mm index 72527edf05..75cda46468 100644 --- a/iphone/Maps/UI/Search/TableView/MWMSearchTableViewController.mm +++ b/iphone/Maps/UI/Search/TableView/MWMSearchTableViewController.mm @@ -48,6 +48,7 @@ NSString * GetLocalizedTypeName(search::Result const & result) { [super viewWillAppear:animated]; self.tableView.hidden = NO; + self.tableView.insetsContentViewsToSafeArea = YES; [(MWMSearchTableView *)self.view hideNoResultsView:YES]; [self reloadData]; } diff --git a/iphone/Maps/UI/Storyboard/Main.storyboard b/iphone/Maps/UI/Storyboard/Main.storyboard index 1537ef5d62..146cea9f70 100644 --- a/iphone/Maps/UI/Storyboard/Main.storyboard +++ b/iphone/Maps/UI/Storyboard/Main.storyboard @@ -1,9 +1,9 @@ - - + + - + @@ -13,29 +13,29 @@ - + - + - + @@ -122,10 +122,10 @@ - + - + @@ -149,7 +149,7 @@ - + @@ -319,7 +319,7 @@ - + @@ -339,7 +339,7 @@ - + @@ -355,7 +355,7 @@ - + @@ -381,11 +381,11 @@ - + - + @@ -396,10 +396,10 @@ - + - + @@ -416,7 +416,7 @@ - + @@ -425,7 +425,7 @@ - + @@ -434,7 +434,7 @@ - + @@ -443,7 +443,7 @@ - + @@ -452,10 +452,10 @@ - + - + - + @@ -478,7 +478,7 @@ - + @@ -487,7 +487,7 @@ - + @@ -584,7 +584,7 @@ - + @@ -652,15 +652,15 @@ - + - + - + - + @@ -741,7 +741,7 @@ - + @@ -786,11 +786,11 @@ - + - + @@ -801,7 +801,7 @@ - + @@ -812,7 +812,7 @@ - + @@ -856,11 +856,11 @@ - + - + @@ -872,7 +872,7 @@ - + @@ -883,7 +883,7 @@ - + @@ -893,13 +893,13 @@ - + @@ -957,13 +957,13 @@ - + - + - + @@ -1024,7 +1024,7 @@