[iOS] Fixed visual bugs and crashes in style system

https://jira.mail.ru/browse/MAPSME-12818
This commit is contained in:
Alexander Boriskov 2020-01-30 14:40:50 +03:00 committed by Daria Volvenkova
parent 17c627d701
commit 382dffe7db
42 changed files with 310 additions and 185 deletions

View file

@ -211,8 +211,6 @@ using namespace std;
[super viewDidLoad];
self.searchBar.delegate = self;
[self.statusBarBackground setStyleAndApply:@"SearchBarView"];
[self.searchBar setStyleAndApply: @"SearchBar"];
self.searchBar.placeholder = L(@"search_in_the_list");
[self.noResultsView setTranslatesAutoresizingMaskIntoConstraints:NO];

View file

@ -105,6 +105,9 @@
<constraints>
<constraint firstAttribute="height" constant="108" id="R0d-xI-qxQ"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="SearchBarView"/>
</userDefinedRuntimeAttributes>
</view>
<searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="CQZ-YM-Mk4">
<rect key="frame" x="0.0" y="0.0" width="375" height="56"/>

View file

@ -329,18 +329,6 @@
return viewSize
}
override func applyTheme() {
super.applyTheme()
leftTextColor = leftTextColor.opposite()
rightTextColor = rightTextColor.opposite()
topTextColor = topTextColor.opposite()
bottomTextColor = bottomTextColor.opposite()
filledColor = filledColor.opposite()
emptyColor = emptyColor.opposite()
emptyBorderColor = emptyBorderColor.opposite()
filledBorderColor = filledBorderColor.opposite()
}
private func createLayers() -> [CALayer] {
return combineLayers(starLayers: createStarLayers(), textLayers: createTextLayers())
}

View file

@ -81,30 +81,30 @@ final class BCCreateCategoryAlert: MWMAlert {
}
private func process(state: State) {
let color: UIColor
let styleName: String
switch state {
case .valid:
color = UIColor.blackHintText()
styleName = "blackHintText"
rightButton.isEnabled = true
errorLabel.isHidden = true
case .tooFewSymbols:
color = UIColor.blackHintText()
styleName = "blackHintText"
errorLabel.isHidden = true
rightButton.isEnabled = false
case .tooManySymbols:
color = UIColor.buttonRed()
styleName = "buttonRedText"
errorLabel.isHidden = false
errorLabel.text = L("bookmarks_error_title_list_name_too_long")
rightButton.isEnabled = false
case .nameAlreadyExists:
color = UIColor.buttonRed()
styleName = "buttonRedText"
errorLabel.isHidden = false
errorLabel.text = L("bookmarks_error_title_list_name_already_taken")
rightButton.isEnabled = false
}
charactersCountLabel.textColor = color
textFieldContainer.layer.borderColor = color.cgColor
charactersCountLabel.setStyleAndApply(styleName)
textFieldContainer.layer.borderColor = charactersCountLabel.textColor.cgColor
}
private func formatCharactersCountText() {

View file

@ -109,7 +109,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="create"/>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="medium17:blackHintText"/>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="FlatNormalTransButton:medium17"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="rightButtonTap" destination="QQB-Ml-wwB" eventType="touchUpInside" id="HT2-dB-W2f"/>

View file

@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -22,13 +24,13 @@
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3y4-jh-JUF" customClass="RouteManagerDimView" customModule="maps_me" customModuleProvider="target" propertyAccessControl="none">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<subviews>
<view userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TC7-xW-EwE">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kTd-fr-ia7">
<rect key="frame" x="166.5" y="265.5" width="42" height="136.5"/>
<rect key="frame" x="186" y="380" width="42" height="136.5"/>
<subviews>
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_route_manager_trash" translatesAutoresizingMaskIntoConstraints="NO" id="ZEN-kK-2CA">
<rect key="frame" x="-3" y="40" width="48" height="48"/>
@ -92,14 +94,14 @@
<point key="canvasLocation" x="288" y="-49"/>
</view>
<view contentMode="scaleToFill" id="TKX-qe-h4F" propertyAccessControl="none">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="i5M-Pr-FkT">
<rect key="frame" x="0.0" y="563" width="375" height="104"/>
<rect key="frame" x="0.0" y="758" width="414" height="138"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="s0L-ul-gog" customClass="RouteManagerHeaderView" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="375" height="48"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="48"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="760" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dQh-uc-65J">
<rect key="frame" x="16" y="14" width="42" height="20.5"/>
@ -112,7 +114,7 @@
</userDefinedRuntimeAttributes>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0Fo-Ae-QrQ">
<rect key="frame" x="311" y="0.0" width="48" height="48"/>
<rect key="frame" x="370" y="0.0" width="28" height="48"/>
<inset key="contentEdgeInsets" minX="8" minY="0.0" maxX="0.0" maxY="0.0"/>
<inset key="imageEdgeInsets" minX="-8" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" image="ic_get_position"/>
@ -121,7 +123,7 @@
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MJB-bK-y5c">
<rect key="frame" x="16" y="47" width="359" height="1"/>
<rect key="frame" x="16" y="47" width="398" height="1"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="aOa-8P-yGw"/>
@ -154,17 +156,17 @@
</connections>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mqc-M4-MPb" customClass="RouteManagerFooterView" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="48" width="375" height="48"/>
<rect key="frame" x="0.0" y="48" width="414" height="48"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="or0-Gy-0su">
<rect key="frame" x="-100" y="0.0" width="575" height="148"/>
<rect key="frame" x="-100" y="0.0" width="614" height="148"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="BlackOpaqueBackground"/>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pjx-6o-NWS">
<rect key="frame" x="0.0" y="0.0" width="375" height="1"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="1"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="jFT-3E-Yrc"/>
@ -185,7 +187,7 @@
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="u3h-0s-UBo">
<rect key="frame" x="313" y="0.0" width="46" height="48"/>
<rect key="frame" x="352" y="0.0" width="46" height="48"/>
<state key="normal" title="Button"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="FlatNormalTransButton"/>
@ -213,6 +215,9 @@
<constraint firstAttribute="trailing" secondItem="or0-Gy-0su" secondAttribute="trailing" constant="-100" id="zfL-pn-451"/>
<constraint firstItem="or0-Gy-0su" firstAttribute="top" secondItem="mqc-M4-MPb" secondAttribute="top" id="ztB-hC-yRP"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="Background"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="background" destination="or0-Gy-0su" id="aFx-YJ-deT"/>
<outlet property="cancelButton" destination="2WE-hS-hzl" id="8op-cA-N4M"/>
@ -221,12 +226,15 @@
</connections>
</view>
<tableView clipsSubviews="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" style="plain" separatorStyle="none" allowsSelection="NO" rowHeight="48" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="Zqd-YQ-ksD" customClass="RouteManagerTableView" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="48" width="375" height="0.0"/>
<rect key="frame" x="0.0" y="48" width="414" height="0.0"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<gestureRecognizers/>
<constraints>
<constraint firstAttribute="height" priority="750" id="69R-bB-eQ7"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="TableView"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="dataSource" destination="-1" id="RZu-Qk-qvN"/>
<outlet property="delegate" destination="-1" id="QdP-tL-Afh"/>
@ -250,6 +258,9 @@
<constraint firstItem="mqc-M4-MPb" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leadingMargin" constant="-8" id="gvJ-kF-Ylk"/>
<constraint firstItem="s0L-ul-gog" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="ub9-gl-pdn"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="Background"/>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>

View file

@ -7,7 +7,7 @@ final class BaseRoutePreviewStatus: SolidTouchView {
@IBOutlet weak var manageRouteBoxBackground: UIView! {
didSet {
iPhoneSpecific {
manageRouteBoxBackground.styleName = "BlackOpaqueColor"
manageRouteBoxBackground.styleName = "BlackOpaqueBackground"
}
}
}

View file

@ -40,9 +40,11 @@ class Style: ExpressibleByDictionaryLiteral {
case pageIndicatorTintColor
case currentPageIndicatorTintColor
case ratingViewSettings
case coloring
case colors
case images
case exclusions
case unknown
}
@ -50,6 +52,9 @@ class Style: ExpressibleByDictionaryLiteral {
typealias Value = Any?
var params:[Key: Value] = [:]
var isEmpty: Bool {
return params.isEmpty
}
required init(dictionaryLiteral elements: (Style.Parameter, Any?)...) {
for (key, value) in elements {
@ -63,17 +68,31 @@ class Style: ExpressibleByDictionaryLiteral {
func append(_ style: Style) {
params.merge(style.params) { (a, b) -> Style.Value in
return b
return a
}
}
func append(_ styles: [Style]) {
styles.forEach { (style) in
params.merge(style.params) { (a, b) -> Style.Value in
return b
return a
}
}
}
func hasExclusion(view: UIView) -> Bool {
guard let exclusions = exclusions else {
return false
}
var superView:UIView? = view
while (superView != nil) {
if exclusions.contains(String(describing: type(of: superView!))) {
return true
}
superView = superView?.superview
}
return false;
}
}
extension Style {
@ -262,6 +281,11 @@ extension Style {
set { params[.currentPageIndicatorTintColor] = newValue }
}
var ratingViewSettings: RatingViewSettings? {
get { return self[.ratingViewSettings] as? RatingViewSettings }
set { params[.ratingViewSettings] = newValue }
}
var colors: [UIColor]? {
get { return self[.colors] as? [UIColor] }
set { params[.colors] = newValue }
@ -276,4 +300,9 @@ extension Style {
get { return self[.coloring] as? MWMButtonColoring }
set { params[.coloring] = newValue }
}
var exclusions: Set<String>? {
get { return self[.exclusions] as? Set<String> }
set { params[.exclusions] = newValue }
}
}

View file

@ -37,7 +37,9 @@
}
}
UISearchBarRenderer.setAppearance()
if #available(iOS 13, *) {} else {
UISearchBarRenderer.setAppearance()
}
}
private func updateView(_ view: UIView?) {

View file

@ -6,21 +6,20 @@ class GlobalStyleSheet: IStyleSheet {
theme.add(styleName: "TableView") { (s) -> (Void) in
s.backgroundColor = colors.white
s.separatorColor = colors.blackDividers
s.exclusions = [String(describing: UIDatePicker.self)]
}
theme.add(styleName: "TableCell") { (s) -> (Void) in
s.backgroundColor = colors.white
s.fontColor = colors.blackPrimaryText
s.tintColor = colors.blackPrimaryText
s.fontColorDetailed = colors.blackSecondaryText
}
theme.add(styleName: "MWMTableViewCell") { (s) -> (Void) in
s.backgroundColor = colors.white
s.fontColor = colors.blackPrimaryText
s.tintColor = colors.blackPrimaryText
s.tintColor = colors.linkBlue
s.fontColorDetailed = colors.blackSecondaryText
s.backgroundColorSelected = colors.pressBackground
s.exclusions = [String(describing: UIDatePicker.self),
"_UIActivityUserDefaultsActivityCell"]
}
theme.add(styleName: "MWMTableViewCell", from: "TableCell") { (s) -> (Void) in
}
theme.add(styleName: "TableViewHeaderFooterView") { (s) -> (Void) in
@ -158,6 +157,16 @@ class GlobalStyleSheet: IStyleSheet {
s.shadowOffset = CGSize(width: 0, height: 0)
}
theme.add(styleName: "RatingView") { (s) -> (Void) in
var settings = RatingViewSettings()
settings.filledColor = colors.ratingYellow
settings.emptyColor = colors.blackDividers
settings.textFonts[.right] = fonts.regular10
settings.textColors[.right] = colors.blackSecondaryText
s.ratingViewSettings = settings
s.borderWidth = 0
}
//MARK: Buttons
theme.add(styleName: "FlatNormalButton") { (s) -> (Void) in
s.font = fonts.medium14
@ -181,6 +190,7 @@ class GlobalStyleSheet: IStyleSheet {
s.fontColor = colors.linkBlue
s.backgroundColor = colors.clear
s.fontColorHighlighted = colors.linkBlueHighlighted
s.fontColorDisabled = colors.blackHintText
s.backgroundColorHighlighted = colors.clear
}

View file

@ -4,8 +4,9 @@ extension Checkmark {
if styleName.isEmpty {
styleName = "Checkmark"
}
for style in StyleManager.shared.getStyle(styleName) {
CheckmarkRenderer.render(self, style: style)
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
CheckmarkRenderer.render(self, style: style)
}
}
}

View file

@ -1,7 +1,8 @@
extension MWMButton {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
MWMButtonRenderer.render(self, style: style)
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
MWMButtonRenderer.render(self, style: style)
}
}
}

View file

@ -4,40 +4,15 @@ extension MWMTableViewCell {
if styleName.isEmpty {
styleName = "MWMTableViewCell"
}
for style in StyleManager.shared.getStyle(styleName) {
MWMTableViewCellRenderer.render(self, style: style)
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
MWMTableViewCellRenderer.render(self, style: style)
}
}
}
class MWMTableViewCellRenderer {
class MWMTableViewCellRenderer: UITableViewCellRenderer {
class func render(_ control: MWMTableViewCell, style: Style) {
if let label = control.textLabel {
if let font = style.font {
label.font = font
}
if let fontColor = style.fontColor {
label.textColor = fontColor
}
}
if let detailedLabel = control.detailTextLabel {
if let fontDetailed = style.fontDetailed {
detailedLabel.font = fontDetailed
}
if let fontColorDetailed = style.fontColorDetailed {
detailedLabel.textColor = fontColorDetailed
}
}
if let tintColor = style.tintColor {
control.tintColor = tintColor
control.accessoryView?.tintColor = tintColor
}
if let backgroundColor = style.backgroundColor {
control.backgroundColor = backgroundColor
control.backgroundView = UIImageView(image: backgroundColor.getImage())
}
if let backgroundColorSelected = style.backgroundColorSelected {
control.selectedBackgroundView = UIImageView(image: backgroundColorSelected.getImage())
}
super.render(control, style: style)
}
}

View file

@ -1,8 +1,9 @@
import Foundation
extension RatingSummaryView {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
RatingSummaryViewRenderer.render(self, style: style)
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
RatingSummaryViewRenderer.render(self, style: style)
}
}
}
@ -22,7 +23,7 @@ class RatingSummaryViewRenderer {
control.excellentColor = colors[5]
}
if let images = style.images, images.count == 6 {
control.normalImage = UIImage(named: images[0])
control.noValueImage = UIImage(named: images[0])
control.horribleImage = UIImage(named: images[1])
control.badImage = UIImage(named: images[2])
control.normalImage = UIImage(named: images[3])

View file

@ -0,0 +1,24 @@
import Foundation
extension RatingView {
@objc override func applyTheme() {
if styleName.isEmpty {
styleName = "RatingView"
}
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
RatingViewRenderer.render(self, style: style)
}
}
}
class RatingViewRenderer {
class func render(_ control: RatingView, style: Style) {
if let settings = style.ratingViewSettings {
control.settings = settings
}
if let borderWidth = style.borderWidth {
control.borderWidth = borderWidth
}
}
}

View file

@ -3,7 +3,8 @@ extension TabView {
if styleName.isEmpty {
styleName = "TabView"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
TabViewRenderer.render(self, style: style)
}
}

View file

@ -1,6 +1,7 @@
extension UIActivityIndicatorView {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UIActivityIndicatorRenderer.render(self, style: style)
}
}

View file

@ -1,6 +1,7 @@
extension UIButton {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UIButtonRenderer.render(self, style: style)
}
}

View file

@ -1,6 +1,7 @@
extension UIImageView {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UIImageViewRenderer.render(self, style: style)
}
}

View file

@ -12,8 +12,8 @@ extension UILabel {
}
@objc override func applyTheme() {
let styles = StyleManager.shared.getStyle(styleName)
for style in styles {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UILabelRenderer.render(self, style: style)
}
}

View file

@ -4,7 +4,8 @@ extension UINavigationBar {
if styleName.isEmpty {
styleName = "NavigationBar"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UINavigationBarRenderer.render(self, style: style)
}
}

View file

@ -3,7 +3,8 @@ extension UINavigationItem {
if styleName.isEmpty {
styleName = "NavigationBarItem"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty {
UINavigationItemRenderer.render(self, style: style)
}
}

View file

@ -3,7 +3,8 @@ extension UIPageControl {
if styleName.isEmpty {
styleName = "PageControl"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UIPageControlenderer.render(self, style: style)
}
}

View file

@ -4,20 +4,46 @@ extension UISearchBar {
if styleName.isEmpty {
styleName = "SearchBar"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UISearchBarRenderer.render(self, style: style)
}
}
@objc override func sw_didMoveToWindow() {
guard UIApplication.shared.keyWindow === window else {
sw_didMoveToWindow();
return
}
applyTheme()
isStyleApplied = true
sw_didMoveToWindow();
}
}
class UISearchBarRenderer: UIViewRenderer {
class func render(_ control: UISearchBar, style: Style) {
super.render(control, style: style)
var searchTextField: UITextField?
if #available(iOS 13, *) {
searchTextField = control.searchTextField
}
if let backgroundColor = style.backgroundColor {
searchTextField?.backgroundColor = backgroundColor
}
if let barTintColor = style.barTintColor {
control.barTintColor = barTintColor
control.backgroundImage = barTintColor.getImage()
}
if let tintColor = style.tintColor {
control.tintColor = tintColor
searchTextField?.tintColor = tintColor
}
if let font = style.font {
searchTextField?.font = font
}
if let fontColor = style.fontColor {
searchTextField?.textColor = fontColor
searchTextField?.leftView?.tintColor = fontColor
}
}
@ -27,14 +53,15 @@ class UISearchBarRenderer: UIViewRenderer {
if let backgroundColor = style.backgroundColor {
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = backgroundColor
}
if let tintColor = style.tintColor {
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).leftView?.tintColor = tintColor
}
if let font = style.font {
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = font
}
if let fontColor = style.fontColor {
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = fontColor
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).leftView?.tintColor = fontColor
}
if let tintColor = style.tintColor {
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).tintColor = tintColor
}
}
}

View file

@ -3,7 +3,8 @@ extension UISwitch {
if styleName.isEmpty {
styleName = "Switch"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UISwitchRenderer.render(self, style: style)
}
}

View file

@ -3,7 +3,8 @@ extension UITableViewCell {
if styleName.isEmpty {
styleName = "TableCell"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UITableViewCellRenderer.render(self, style: style)
}
}
@ -27,6 +28,9 @@ class UITableViewCellRenderer {
detailedLabel.textColor = fontColorDetailed
}
}
if let fontColorDetailed = style.fontColorDetailed {
control.imageView?.tintColor = fontColorDetailed
}
if let tintColor = style.tintColor {
control.tintColor = tintColor
control.accessoryView?.tintColor = tintColor
@ -35,5 +39,8 @@ class UITableViewCellRenderer {
control.backgroundColor = backgroundColor
control.backgroundView = UIImageView(image: backgroundColor.getImage())
}
if let backgroundColorSelected = style.backgroundColorSelected {
control.selectedBackgroundView = UIImageView(image: backgroundColorSelected.getImage())
}
}
}

View file

@ -3,7 +3,8 @@ extension UITableViewHeaderFooterView {
if styleName.isEmpty {
styleName = "TableViewHeaderFooterView"
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UITableViewHeaderFooterViewRenderer.render(self, style: style)
}
}

View file

@ -1,6 +1,7 @@
extension UITableView {
@objc override func applyTheme() {
if styleName.isEmpty {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
styleName = "TableView"
}
for style in StyleManager.shared.getStyle(styleName) {

View file

@ -1,6 +1,7 @@
extension UITextField {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UITextFieldRenderer.render(self, style: style)
}
}
@ -18,14 +19,25 @@ extension UITextField {
class UITextFieldRenderer {
class func render(_ control: UITextField, style: Style) {
var placeholderAttributes = [NSAttributedString.Key : Any]()
if let backgroundColor = style.backgroundColor {
control.backgroundColor = backgroundColor
}
if let font = style.font {
control.font = font
placeholderAttributes[NSAttributedString.Key.font] = font
}
if let fontColor = style.fontColor {
control.textColor = fontColor
}
if let tintColor = style.tintColor {
control.tintColor = tintColor
placeholderAttributes[NSAttributedString.Key.foregroundColor] = tintColor
}
if let attributedPlaceholder = control.attributedPlaceholder, !attributedPlaceholder.string.isEmpty {
control.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string,
attributes: placeholderAttributes)
}
}
}

View file

@ -1,6 +1,7 @@
extension UITextView {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UITextViewRenderer.render(self, style: style)
}
}

View file

@ -1,6 +1,7 @@
extension UIToolbar {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UIToolbarRenderer.render(self, style: style)
}
}

View file

@ -3,7 +3,8 @@ extension UIView {
if type(of: self.superview) == UINavigationBar.self {
return;
}
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UIViewRenderer.render(self, style: style)
}
}

View file

@ -1,6 +1,7 @@
extension UIWindow {
@objc override func applyTheme() {
for style in StyleManager.shared.getStyle(styleName) {
for style in StyleManager.shared.getStyle(styleName)
where !style.isEmpty && !style.hasExclusion(view: self) {
UIWindowRenderer.render(self, style: style)
}
}

View file

@ -73,6 +73,7 @@ class SearchStyleSheet: IStyleSheet {
theme.add(styleName: "SearchSearchTextField") { (s) -> (Void) in
s.fontColor = colors.blackSecondaryText
s.backgroundColor = colors.white
s.tintColor = colors.blackSecondaryText
}
theme.add(styleName: "SearchSearchTextFieldIcon") { (s) -> (Void) in

View file

@ -0,0 +1,9 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UISearchBar (swizzle)
@end
NS_ASSUME_NONNULL_END

View file

@ -0,0 +1,8 @@
#import "UISearchBar+swizzle.h"
#import "SwizzleStyle.h"
@implementation UISearchBar (swizzle)
+(void)load {
[SwizzleStyle swizzle:[self class] methodName:@"didMoveToWindow"];
}
@end

View file

@ -3,8 +3,6 @@
@implementation UITextField (swizzle)
+(void)load {
if (@available(iOS 12, *)) {
[SwizzleStyle swizzle:[self class] methodName:@"didMoveToWindow"];
}
[SwizzleStyle swizzle:[self class] methodName:@"didMoveToWindow"];
}
@end

View file

@ -619,6 +619,7 @@
995739042355CAA30019AEE7 /* PageIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995739032355CAA30019AEE7 /* PageIndicator.swift */; };
995739062355CAC40019AEE7 /* ImageViewCrossDisolve.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995739052355CAC40019AEE7 /* ImageViewCrossDisolve.swift */; };
995739082355CB660019AEE7 /* AllPassSubscriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995739072355CB660019AEE7 /* AllPassSubscriptionViewController.swift */; };
9974CA3A23E05B9C003FE824 /* RatingViewRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9974CA3923E05B9C003FE824 /* RatingViewRenderer.swift */; };
999D3A67237BFA4600C5F7A8 /* SubscriptionViewBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999D3A66237BFA4600C5F7A8 /* SubscriptionViewBuilder.swift */; };
999FC12023ABA9AD00B0E6F9 /* SearchStyleSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999FC11F23ABA9AD00B0E6F9 /* SearchStyleSheet.swift */; };
999FC12223ABABA000B0E6F9 /* IFonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999FC12123ABABA000B0E6F9 /* IFonts.swift */; };
@ -650,6 +651,7 @@
99D363172358647700941BF4 /* SubscriptionGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D363162358647700941BF4 /* SubscriptionGroup.swift */; };
99D363192358685300941BF4 /* SubscriptionGroupItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D363182358685300941BF4 /* SubscriptionGroupItem.swift */; };
99D3631E23589BE800941BF4 /* FredokaOne-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 99D3631D23589BE800941BF4 /* FredokaOne-Regular.ttf */; };
99DEF9D023E2CD67006BFD21 /* UISearchBar+swizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 99DEF9CF23E2CD67006BFD21 /* UISearchBar+swizzle.m */; };
99E2B0122368A8C700FFABC5 /* MWMCategory+PlacesCountTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99E2B0112368A8C700FFABC5 /* MWMCategory+PlacesCountTitle.swift */; };
99E2B01E23698B0800FFABC5 /* WelcomeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99E2B01D23698B0800FFABC5 /* WelcomeProtocols.swift */; };
99E2B0232369904800FFABC5 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99E2B0222369904800FFABC5 /* WelcomeViewController.swift */; };
@ -1677,6 +1679,7 @@
9957FAE0237AE04900855F48 /* MWMMapViewControlsManager+AddPlace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MWMMapViewControlsManager+AddPlace.h"; sourceTree = "<group>"; };
9957FAE3237AE3CF00855F48 /* DeepLinkCatalogueStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkCatalogueStrategy.swift; sourceTree = "<group>"; };
9957FAEA237AF22800855F48 /* DeepLinkIncorrectStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkIncorrectStrategy.swift; sourceTree = "<group>"; };
9974CA3923E05B9C003FE824 /* RatingViewRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RatingViewRenderer.swift; sourceTree = "<group>"; };
999D3A60237B088C00C5F7A8 /* DeepLinkSubscriptionStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkSubscriptionStrategy.swift; sourceTree = "<group>"; };
999D3A66237BFA4600C5F7A8 /* SubscriptionViewBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionViewBuilder.swift; sourceTree = "<group>"; };
999D3A68237C0ADD00C5F7A8 /* DeepLinkMapStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkMapStrategy.swift; sourceTree = "<group>"; };
@ -1713,6 +1716,8 @@
99D363162358647700941BF4 /* SubscriptionGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionGroup.swift; sourceTree = "<group>"; };
99D363182358685300941BF4 /* SubscriptionGroupItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionGroupItem.swift; sourceTree = "<group>"; };
99D3631D23589BE800941BF4 /* FredokaOne-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "FredokaOne-Regular.ttf"; sourceTree = "<group>"; };
99DEF9CE23E2CD67006BFD21 /* UISearchBar+swizzle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UISearchBar+swizzle.h"; sourceTree = "<group>"; };
99DEF9CF23E2CD67006BFD21 /* UISearchBar+swizzle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UISearchBar+swizzle.m"; sourceTree = "<group>"; };
99E2B0112368A8C700FFABC5 /* MWMCategory+PlacesCountTitle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MWMCategory+PlacesCountTitle.swift"; sourceTree = "<group>"; };
99E2B01D23698B0800FFABC5 /* WelcomeProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeProtocols.swift; sourceTree = "<group>"; };
99E2B0222369904800FFABC5 /* WelcomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = "<group>"; };
@ -3604,6 +3609,8 @@
9929693A23D89B7100B0D5D9 /* UIView+swizzle.m */,
9929693C23D89C1400B0D5D9 /* UITextField+swizzle.h */,
9929693D23D89C1400B0D5D9 /* UITextField+swizzle.m */,
99DEF9CE23E2CD67006BFD21 /* UISearchBar+swizzle.h */,
99DEF9CF23E2CD67006BFD21 /* UISearchBar+swizzle.m */,
);
path = Swizzle;
sourceTree = "<group>";
@ -3690,6 +3697,7 @@
991FCA1D23AD0A73009AD684 /* MWMButtonRenderer.swift */,
99F50FC723B273F800E95228 /* MWMTableViewCellRenderer.swift */,
99169D7223D06B390006A9CA /* RatingSummaryViewRenderer.swift */,
9974CA3923E05B9C003FE824 /* RatingViewRenderer.swift */,
999FC12E23ABD53300B0E6F9 /* TabViewRenderer.swift */,
994AEBEB23AB763C0079B81F /* UIActivityIndicatorRenderer.swift */,
994AEBEA23AB763C0079B81F /* UIButtonRenderer.swift */,
@ -5296,6 +5304,7 @@
34E50DF81F6FCC96008EED49 /* UGCReviewCell.swift in Sources */,
F6E2FF3F1E097BA00083EBEC /* MWMSearchTableViewController.mm in Sources */,
F6E2FDE01E097BA00083EBEC /* MWMEditorViewController.mm in Sources */,
99DEF9D023E2CD67006BFD21 /* UISearchBar+swizzle.m in Sources */,
994AEC3423AB7B410079B81F /* DiscoveryStyleSheet.swift in Sources */,
6741A9C01BF340DE002C974C /* MWMTextView.m in Sources */,
B32FE74320D2B09600EF7446 /* CatalogWebViewController.swift in Sources */,
@ -5331,6 +5340,7 @@
34845DAF1E1649F6003D55B9 /* DownloaderNoResultsEmbedViewController.swift in Sources */,
CD6E8677226774C700D1EDF7 /* CPConstants.swift in Sources */,
F6791B141C43DF0B007A8A6E /* MWMStartButton.m in Sources */,
9974CA3A23E05B9C003FE824 /* RatingViewRenderer.swift in Sources */,
47A04171238DE8AE00D84E95 /* HotelFacilitiesViewController.swift in Sources */,
479D306522C664CE00D18278 /* MWMDownloadBannerViewController.m in Sources */,
F6E2FEDF1E097BA00083EBEC /* MWMSearchManager+Layout.m in Sources */,

View file

@ -2,7 +2,6 @@ final class UGCAddReviewRatingCell: MWMTableViewCell {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var ratingView: RatingView! {
didSet {
ratingView.borderWidth = 0
ratingView.delegate = self
}
}

View file

@ -1,12 +1,6 @@
final class UGCSummaryRatingStarsCell: UICollectionViewCell {
@IBOutlet private weak var ratingView: RatingView! {
didSet {
ratingView.topTextFont = UIFont.regular10()
ratingView.topTextColor = UIColor.blackSecondaryText()
ratingView.borderWidth = 0
}
}
@IBOutlet private weak var ratingView: RatingView!
func config(rating: UGCRatingStars) {
ratingView.topText = L(rating.title)

View file

@ -35,6 +35,14 @@ NSTimeInterval constexpr kOnSearchCompletedDelay = 0.2;
return rect;
}
#pragma mark - Draw
- (void)drawPlaceholderInRect:(CGRect)rect
{
[[self placeholder] drawInRect:rect withAttributes:@{NSFontAttributeName: self.font,
NSForegroundColorAttributeName: self.tintColor}];
}
#pragma mark - Properties
- (void)setIsSearching:(BOOL)isSearching
@ -50,7 +58,7 @@ NSTimeInterval constexpr kOnSearchCompletedDelay = 0.2;
UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
[view startAnimating];
view.bounds = self.leftView.bounds;
view.styleName = @"SearchSearchTextFieldIcon";
view.styleName = @"SearchSearchTextFieldIcon";
self.leftView = view;
}
else

View file

@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Wns-nH-AQU">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -11,49 +13,49 @@
<objects>
<viewController id="xTf-lf-yxN" customClass="MapViewController" sceneMemberID="viewController">
<view key="view" clearsContextBeforeDrawing="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" id="USG-6L-Uhw">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_carplay_activated" translatesAutoresizingMaskIntoConstraints="NO" id="Tqh-46-Yrm">
<rect key="frame" x="220" y="220" width="160" height="160"/>
<rect key="frame" x="127" y="373" width="160" height="160"/>
<constraints>
<constraint firstAttribute="height" constant="160" id="dkE-Cj-sE5"/>
<constraint firstAttribute="width" constant="160" id="pz7-lu-Ocm"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aPn-pa-nCx" customClass="EAGLView">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<color key="backgroundColor" red="0.8666666666666667" green="0.8666666666666667" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rL1-9E-4b7">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<subviews>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="65S-M4-TnM" customClass="NavigationInfoArea" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TdT-ia-GP9" customClass="MenuArea" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="862"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="awj-9E-eBS" customClass="PlacePageArea" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="862"/>
<color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FFY-Dy-Wou" customClass="VisibleArea" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="862"/>
<color key="backgroundColor" red="0.0" green="1" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NI8-tV-i2B" customClass="WidgetsArea" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
<color key="backgroundColor" red="0.0" green="1" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xJx-UU-IdV" customClass="SideButtonsArea" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QKu-4A-UgP" customClass="TrafficButtonArea" customModule="maps_me" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
<color key="backgroundColor" red="0.0" green="1" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
</subviews>
@ -181,7 +183,6 @@
<navigationController automaticallyAdjustsScrollViewInsets="NO" navigationBarHidden="YES" id="Wns-nH-AQU" customClass="MWMNavigationController" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="OK2-RC-YDq">
<rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
@ -198,7 +199,7 @@
<objects>
<tableViewController id="lFr-lA-JTW" customClass="MWMEditBookmarkController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="Rb3-ea-7LJ">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
@ -234,7 +235,7 @@
<objects>
<tableViewController id="Lfa-Zp-orR" customClass="MWMEditorViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="HU6-ak-Eu1">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
@ -260,11 +261,11 @@
<objects>
<viewController id="Ld6-gM-2hk" customClass="MWMOpeningHoursEditorViewController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="U1f-hD-9rl">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="none" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="X1H-IB-Nv1">
<rect key="frame" x="0.0" y="0.0" width="600" height="556"/>
<rect key="frame" x="0.0" y="44" width="414" height="774"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="PressBackground"/>
@ -275,10 +276,10 @@
</connections>
</tableView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aQv-7U-zAP">
<rect key="frame" x="0.0" y="0.0" width="600" height="556"/>
<rect key="frame" x="0.0" y="44" width="414" height="774"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="PrH-u2-IEv" userLabel="Editor View" customClass="MWMTextView">
<rect key="frame" x="0.0" y="36" width="600" height="88"/>
<rect key="frame" x="0.0" y="36" width="414" height="88"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="88" id="oAE-yX-hVe"/>
@ -295,7 +296,7 @@
</connections>
</textView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="separator_image" translatesAutoresizingMaskIntoConstraints="NO" id="z2Z-G2-Np7">
<rect key="frame" x="0.0" y="35" width="600" height="1"/>
<rect key="frame" x="0.0" y="35" width="414" height="1"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="xUX-ck-MQb"/>
</constraints>
@ -304,7 +305,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="separator_image" translatesAutoresizingMaskIntoConstraints="NO" id="ebA-fW-ddJ">
<rect key="frame" x="0.0" y="123" width="600" height="1"/>
<rect key="frame" x="0.0" y="123" width="414" height="1"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="HOj-tZ-b3F"/>
</constraints>
@ -313,7 +314,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="separator_image" translatesAutoresizingMaskIntoConstraints="NO" id="5T5-Pp-hb5">
<rect key="frame" x="0.0" y="511" width="600" height="1"/>
<rect key="frame" x="0.0" y="729" width="414" height="1"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="ZXK-zv-uSz"/>
</constraints>
@ -322,7 +323,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="separator_image" translatesAutoresizingMaskIntoConstraints="NO" id="IX2-yp-0oa">
<rect key="frame" x="0.0" y="164" width="600" height="1"/>
<rect key="frame" x="0.0" y="164" width="414" height="1"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="rD4-fE-ez2"/>
</constraints>
@ -331,10 +332,10 @@
</userDefinedRuntimeAttributes>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="85Z-MR-kUV" userLabel="Help View">
<rect key="frame" x="0.0" y="164" width="600" height="328"/>
<rect key="frame" x="0.0" y="164" width="414" height="328"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n79-h1-Nk3" userLabel="Button">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Example values" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="120" translatesAutoresizingMaskIntoConstraints="NO" id="dAM-iT-fzu">
<rect key="frame" x="16" y="12" width="120" height="20"/>
@ -347,7 +348,7 @@
</userDefinedRuntimeAttributes>
</label>
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_arrow_gray_down" translatesAutoresizingMaskIntoConstraints="NO" id="m7d-sG-5LN">
<rect key="frame" x="568" y="10" width="24" height="24"/>
<rect key="frame" x="382" y="10" width="24" height="24"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="2aF-WV-ER2"/>
<constraint firstAttribute="width" constant="24" id="eak-KY-Xaa"/>
@ -357,7 +358,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="separator_image" translatesAutoresizingMaskIntoConstraints="NO" id="Suj-t5-ZWs">
<rect key="frame" x="16" y="44" width="584" height="1"/>
<rect key="frame" x="16" y="44" width="398" height="1"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="cv8-Tg-Oin"/>
</constraints>
@ -366,7 +367,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MiP-Du-s3i">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<action selector="toggleExample" destination="Ld6-gM-2hk" eventType="touchUpInside" id="BGK-Ap-YBq"/>
@ -393,7 +394,7 @@
</userDefinedRuntimeAttributes>
</view>
<webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="j5R-JF-iCs">
<rect key="frame" x="10" y="56" width="580" height="260"/>
<rect key="frame" x="10" y="56" width="394" height="260"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" priority="750" constant="260" id="sfy-fK-VSx"/>
@ -439,10 +440,10 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SZQ-ra-FC3" userLabel="Mode Switch">
<rect key="frame" x="0.0" y="556" width="600" height="44"/>
<rect key="frame" x="0.0" y="818" width="414" height="44"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fB1-w2-lJI">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<inset key="contentEdgeInsets" minX="16" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" title="Simple Mode"/>
<userDefinedRuntimeAttributes>
@ -453,7 +454,7 @@
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_arrow_gray_right" translatesAutoresizingMaskIntoConstraints="NO" id="z8F-55-5rJ">
<rect key="frame" x="568" y="10" width="24" height="24"/>
<rect key="frame" x="382" y="10" width="24" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="24" id="ypP-17-bfX"/>
<constraint firstAttribute="height" constant="24" id="zE5-1N-qvh"/>
@ -463,7 +464,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="separator_image" translatesAutoresizingMaskIntoConstraints="NO" id="onT-vv-01i">
<rect key="frame" x="0.0" y="-1" width="600" height="1"/>
<rect key="frame" x="0.0" y="-1" width="414" height="1"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="UUW-c4-eNA"/>
</constraints>
@ -531,15 +532,15 @@
<objects>
<tableViewController id="ocL-kj-jxR" customClass="MWMEditorAdditionalNamesTableViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="tQ2-XI-QWd">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="ListCellIdentifier" textLabel="JcK-nR-UGw" detailTextLabel="Cmi-x5-6Vt" style="IBUITableViewCellStyleSubtitle" id="RXe-xp-xlR" customClass="MWMTableViewCell">
<rect key="frame" x="0.0" y="28" width="600" height="44"/>
<rect key="frame" x="0.0" y="28" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="RXe-xp-xlR" id="g0x-Vt-1FI">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="JcK-nR-UGw">
@ -575,7 +576,7 @@
<objects>
<tableViewController id="Heu-QR-M0N" customClass="MWMStreetEditorViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="rJJ-UB-6u2">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="scrollIndicatorInsets" minX="0.0" minY="44" maxX="0.0" maxY="0.0"/>
@ -594,11 +595,11 @@
<objects>
<viewController id="QlF-CJ-cEG" customClass="MWMObjectsCategorySelectorController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="MIY-NW-Joh">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="JbV-y9-HBo">
<rect key="frame" x="0.0" y="56" width="600" height="544"/>
<rect key="frame" x="0.0" y="100" width="414" height="762"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="TableView:PressBackground"/>
@ -609,7 +610,7 @@
</connections>
</tableView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rI9-RR-sKP" userLabel="Status Bar Background">
<rect key="frame" x="0.0" y="-52" width="600" height="108"/>
<rect key="frame" x="0.0" y="-8" width="414" height="108"/>
<color key="backgroundColor" red="0.1215686275" green="0.59999999999999998" blue="0.32156862749999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="tintColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
@ -620,7 +621,7 @@
</userDefinedRuntimeAttributes>
</view>
<searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="gzF-B7-8pj">
<rect key="frame" x="0.0" y="0.0" width="600" height="56"/>
<rect key="frame" x="0.0" y="44" width="414" height="56"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="44" id="2uI-k6-ahr"/>
@ -665,11 +666,11 @@
<objects>
<viewController id="da4-KT-kzF" customClass="MWMCuisineEditorViewController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="iTG-qE-svw">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="ina-WD-kps">
<rect key="frame" x="0.0" y="56" width="600" height="544"/>
<rect key="frame" x="0.0" y="100" width="414" height="762"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="TableView:PressBackground"/>
@ -680,7 +681,7 @@
</connections>
</tableView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HEU-Bu-3wh" userLabel="Status Bar Background">
<rect key="frame" x="0.0" y="-52" width="600" height="108"/>
<rect key="frame" x="0.0" y="-8" width="414" height="108"/>
<color key="backgroundColor" red="0.1215686275" green="0.59999999999999998" blue="0.32156862749999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="tintColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
@ -691,7 +692,7 @@
</userDefinedRuntimeAttributes>
</view>
<searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="z6s-26-dP6">
<rect key="frame" x="0.0" y="0.0" width="600" height="56"/>
<rect key="frame" x="0.0" y="44" width="414" height="56"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="44" id="UAk-z1-2EY"/>
@ -735,15 +736,15 @@
<objects>
<viewController storyboardIdentifier="DownloadMapsViewController" id="h4a-ne-bSJ" customClass="MWMDownloadMapsViewController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="XQZ-0V-SyR">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="1" translatesAutoresizingMaskIntoConstraints="NO" id="CwW-x8-G3j">
<rect key="frame" x="0.0" y="56" width="600" height="544"/>
<rect key="frame" x="0.0" y="100" width="414" height="762"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="PressBackground"/>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="TableView:PressBackground"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="dataSource" destination="h4a-ne-bSJ" id="nrq-1D-7lZ"/>
@ -751,17 +752,17 @@
</connections>
</tableView>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="st5-ZJ-F0A" userLabel="UpdateAllView">
<rect key="frame" x="16" y="556" width="568" height="44"/>
<rect key="frame" x="16" y="818" width="382" height="44"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0aj-pt-FjD">
<rect key="frame" x="0.0" y="0.0" width="568" height="1"/>
<rect key="frame" x="0.0" y="0.0" width="382" height="1"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" priority="750" constant="1" id="6LI-Em-15P"/>
</constraints>
</view>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GN0-2F-Ytz" customClass="MWMButton">
<rect key="frame" x="0.0" y="0.0" width="568" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="382" height="44"/>
<color key="backgroundColor" red="0.034757062792778015" green="0.31522077322006226" blue="0.81491315364837646" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" title="Update All">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@ -774,7 +775,7 @@
</connections>
</button>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bQM-6x-WHa" customClass="MWMButton">
<rect key="frame" x="0.0" y="0.0" width="568" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="382" height="44"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" title="Update All">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@ -816,7 +817,7 @@
</variation>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xxz-fq-71r" userLabel="Status Bar Background">
<rect key="frame" x="0.0" y="-52" width="600" height="108"/>
<rect key="frame" x="0.0" y="-8" width="414" height="108"/>
<color key="backgroundColor" red="0.1215686275" green="0.59999999999999998" blue="0.32156862749999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="tintColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
@ -827,22 +828,17 @@
</userDefinedRuntimeAttributes>
</view>
<searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="DPt-gs-efn">
<rect key="frame" x="0.0" y="0.0" width="600" height="56"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<rect key="frame" x="0.0" y="44" width="414" height="56"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="44" id="9M7-y1-RSU"/>
</constraints>
<color key="barTintColor" red="0.1215686275" green="0.59999999999999998" blue="0.32156862749999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="searchBar"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="delegate" destination="h4a-ne-bSJ" id="k3P-rj-vcL"/>
</connections>
</searchBar>
<containerView hidden="YES" opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kXO-Oh-2vO" userLabel="No Maps Container View">
<rect key="frame" x="0.0" y="56" width="600" height="544"/>
<rect key="frame" x="0.0" y="100" width="414" height="762"/>
<connections>
<segue destination="b8o-rZ-x0k" kind="embed" identifier="MapDownloaderNoResultsEmbedViewControllerSegue" id="ish-dC-mkH"/>
</connections>
@ -898,13 +894,13 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Gmw-e3-n53" userLabel="Container" customClass="MWMNoMapsView">
<rect key="frame" x="3.5" y="0.0" width="407" height="762"/>
<rect key="frame" x="3.5" y="44" width="407" height="674"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dCZ-PN-2Ob" userLabel="BoundsView">
<rect key="frame" x="16" y="0.0" width="375" height="658"/>
<rect key="frame" x="16" y="0.0" width="375" height="570"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="87G-jh-N8H" userLabel="CenteredView">
<rect key="frame" x="0.0" y="204.5" width="375" height="249"/>
<rect key="frame" x="0.0" y="160.5" width="375" height="249"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalCompressionResistancePriority="749" image="img_no_maps" translatesAutoresizingMaskIntoConstraints="NO" id="vI9-fc-FO2">
<rect key="frame" x="107.5" y="0.0" width="160" height="160"/>
@ -965,7 +961,7 @@
</constraints>
</view>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Moj-UK-oyl" userLabel="DownloadMaps" customClass="MWMButton">
<rect key="frame" x="83.5" y="678" width="240" height="44"/>
<rect key="frame" x="83.5" y="590" width="240" height="44"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="240" id="49x-bx-JJj"/>
@ -1036,11 +1032,11 @@
<objects>
<viewController storyboardIdentifier="SearchNoResultsViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="0VQ-EO-9Sv" customClass="SearchNoResultsViewController" customModule="maps_me" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="9jm-RW-DZK">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EbW-Mp-c6s">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="241" width="414" height="414"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" secondItem="EbW-Mp-c6s" secondAttribute="height" multiplier="1:1" id="tBC-sb-Q3g"/>
@ -1102,7 +1098,6 @@
<navigationController automaticallyAdjustsScrollViewInsets="NO" navigationBarHidden="YES" id="b8o-rZ-x0k" customClass="MWMDownloaderNoResultsEmbedViewController" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="iNT-L2-ifB">
<rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>