From 99662c6c0094b56601089a6b4fe6c4c139192a6a Mon Sep 17 00:00:00 2001 From: Apple <> Date: Thu, 8 Oct 2020 18:55:35 -0800 Subject: [PATCH] Upgraded for Xcode 12.2 --- README.md | 36 ++-- UIKitCatalog.xcodeproj/project.pbxproj | 6 +- .../ActivityIndicatorViewController.swift | 31 +++ .../AlertControllerViewController.swift | 4 +- UIKitCatalog/Assets.xcassets/Contents.json | 6 +- .../Contents.json | 23 --- .../increment_disabled_1x.png | Bin 1352 -> 0 bytes .../increment_disabled_2x.png | Bin 1451 -> 0 bytes .../stepper_increment_disabled_3x.png | Bin 3037 -> 0 bytes .../Contents.json | 23 --- .../increment_highlighted_1x.png | Bin 1345 -> 0 bytes .../increment_highlighted_2x.png | Bin 1430 -> 0 bytes .../stepper_increment_highlighted_3x.png | Bin 3030 -> 0 bytes .../AlertControllerViewController.storyboard | 27 ++- .../ButtonViewController.storyboard | 18 +- .../ColorPickerViewController.storyboard | 53 +++-- .../FontPickerViewController.storyboard | 36 ++-- UIKitCatalog/Base.lproj/Localizable.strings | 1 + .../Base.lproj/StackViewController.storyboard | 58 +++--- .../SwitchViewController.storyboard | 37 +++- UIKitCatalog/Base.lproj/content.html | 2 +- UIKitCatalog/ButtonViewController.swift | 15 +- UIKitCatalog/ColorPickerViewController.swift | 63 +++++- UIKitCatalog/FontPickerViewController.swift | 74 ++++++- UIKitCatalog/OutlineViewController.swift | 188 +++++++++++------- UIKitCatalog/ProgressViewController.swift | 31 +++ UIKitCatalog/SceneDelegate.swift | 16 ++ .../SegmentedControlViewController.swift | 31 +++ UIKitCatalog/SliderViewController.swift | 28 ++- UIKitCatalog/StepperViewController.swift | 18 +- UIKitCatalog/SwitchViewController.swift | 72 ++++++- UIKitCatalog/TextFieldViewController.swift | 36 +++- UIKitCatalog/UIKitCatalog.entitlements | 2 + 33 files changed, 678 insertions(+), 257 deletions(-) delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/Contents.json delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/increment_disabled_1x.png delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/increment_disabled_2x.png delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/stepper_increment_disabled_3x.png delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_highlighted.imageset/Contents.json delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_highlighted.imageset/increment_highlighted_1x.png delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_highlighted.imageset/increment_highlighted_2x.png delete mode 100755 UIKitCatalog/Assets.xcassets/stepper_increment_highlighted.imageset/stepper_increment_highlighted_3x.png diff --git a/README.md b/README.md index b929055..b9772f1 100755 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # UIKit Catalog: Creating and Customizing Views and Controls -Customize your app's user interface with views and controls in UIKit. +Customize your app's user interface with views and controls. ## Overview -This sample guides you through several types of customizations that you can make in your iOS app. The sample uses a split view controller architecture for navigating UIKit views and controls. The primary view controller (`MasterViewController`) shows the available views and controls. Selecting one shows the secondary view controller associated with it. +This sample guides you through several types of customizations you can make in your iOS app. The sample uses a split-view controller architecture for navigating UIKit views and controls. The primary view controller (`MasterViewController`) shows the available views and controls. When you select one, `MasterViewController` shows the secondary view controller associated with it. The name of each secondary view controller reflects its *target item*. For example, the `AlertControllerViewController` class shows how to use a `UIAlertController` object. The only exceptions to this rule are `UISearchBar` and `UIToolbar`; the sample demonstrates these APIs in multiple view controllers to explain how their controls function and how to customize them. To demonstrate how to manage the complexity of your storyboards, the app hosts all view controllers in a separate storyboard and loaded when needed. @@ -16,6 +16,7 @@ This sample demonstrates the following views and controls (several of which are * [`UIDatePicker`](https://developer.apple.com/documentation/uikit/uidatepicker) * [`UIPickerView`](https://developer.apple.com/documentation/uikit/uipickerview) * [`UIColorPickerViewController`](https://developer.apple.com/documentation/uikit/uicolorpickerviewcontroller) +* [`UIColorWell`](https://developer.apple.com/documentation/uikit/uicolorwell) * [`UIFontPickerViewController`](https://developer.apple.com/documentation/uikit/uifontpickerviewcontroller) * [`UIImagePickerViewController`](https://developer.apple.com/documentation/uikit/uiimagepickercontroller) * [`UIImageView`](https://developer.apple.com/documentation/uikit/uiimageview) @@ -28,13 +29,14 @@ This sample demonstrates the following views and controls (several of which are * [`UIStepper`](https://developer.apple.com/documentation/uikit/uistepper) * [`UISwitch`](https://developer.apple.com/documentation/uikit/uiswitch) * [`UITextField`](https://developer.apple.com/documentation/uikit/uitextfield) +* [`UITextFormattingCoordinator`](https://developer.apple.com/documentation/uikit/uitextformattingcoordinator) * [`UITextView`](https://developer.apple.com/documentation/uikit/uitextview) * [`UIToolbar`](https://developer.apple.com/documentation/uikit/uitoolbar) * [`WKWebView`](https://developer.apple.com/documentation/webkit/wkwebview) ## Add Accessibility Support to Your Views -VoiceOver and other system accessibility technologies use the information provided by your views and controls to help all users navigate your content. UIKit views include default accessibility support, but you can improve the user experience by providing custom accessibility information. +VoiceOver and other system accessibility technologies use the information provided by views and controls to help all users navigate content. UIKit views include default accessibility support. Improve user experience by providing custom accessibility information. In this UIKitCatalog sample, several view controllers configure the `accessibilityType` and `accessibilityLabel` properties of their associated view. Picker view columns don't have labels, so the picker view asks its delegate for the corresponding accessibility information: @@ -56,14 +58,14 @@ func pickerView(_ pickerView: UIPickerView, accessibilityLabelForComponent compo ## Display a Custom Alert -`AlertControllerViewController` demonstrates several techniques for displaying modal alerts and action sheets from your interface. The configuration process is similar for all alerts: +`AlertControllerViewController` demonstrates several techniques for displaying modal alerts and action sheets from an interface. The configuration process is similar for all alerts: 1. Determine the message you want to display in the alert. 2. Create and configure a `UIAlertController` object. -3. Add handlers for actions that the user may take. +3. Add handlers for actions the user may take. 4. Present the alert controller. -The `showSimpleAlert` function uses the `NSLocalizedString` function to retrieve the alert messages in the user’s preferred language. The `showSimpleAlert` function uses those strings to create and configure the `UIAlertController` object. Although the button in the alert has the title OK, the sample uses a cancel action to ensure that the alert controller applies the proper styling to the button: +The `showSimpleAlert` function uses the `NSLocalizedString` function to retrieve the alert messages in the user’s preferred language. The `showSimpleAlert` function uses those strings to create and configure the `UIAlertController` object. Although the button in the alert has the title OK, the sample uses a cancel action to ensure the alert controller applies the proper styling to the button: ``` swift func showSimpleAlert() { @@ -87,7 +89,7 @@ func showSimpleAlert() { ## Customize the Appearance of Sliders -This sample demonstrates different ways to display a `UISlider`, a control used to select a single value from a continuous range of values. You customize the appearance of a slider by assigning stretchable images for left-side tracking, right-side tracking, and the thumb. In this example, the track image is stretchable and is one pixel wide. Make the track images wider to provide rounded corners, but be sure to set these images' `capInsets` property to allow for the corners. +This sample demonstrates different ways to display a `UISlider`, a control you use to select a single value from a continuous range of values. Customize the appearance of a slider by assigning stretchable images for left-side tracking, right-side tracking, and the thumb. In this example, the track image is stretchable and is one pixel wide. Make the track images wider to provide rounded corners, but be sure to set these images' `capInsets` property to allow for the corners. The `configureCustomSlider` function sets up a custom slider: @@ -115,9 +117,9 @@ func configureCustomSlider() { } ``` -## Add a Search Bar to Your Interface +## Add a Search Bar to an Interface -Use a `UISearchBar` for receiving search-related information from the user. There are various ways to customize the look of the search bar: +Use a `UISearchBar` to receive search-related information from the user. There are various ways to customize the look of the search bar: * Add a cancel button. * Add a bookmark button. @@ -147,7 +149,7 @@ func configureSearchBar() { ## Customize the Appearance of Toolbars -This sample shows how to customize a `UIToolbar`, a specialized view that displays one or more buttons along the bottom edge of your interface. Customize a toolbar by determining its bar style (black or default), translucency, tint color, and background color. +This sample shows how to customize a `UIToolbar`, a specialized view that displays one or more buttons along the bottom edge of an interface. Customize a toolbar by determining its bar style (black or default), translucency, tint color, and background color. The following `viewDidLoad` function in `CustomToolbarViewController` sets up a tinted tool bar: @@ -191,7 +193,7 @@ override func viewDidLoad() { ## Add a Page Control Interface -Use a `UIPageControl` to structure your app's user interface. A page control is a specialized control that displays a horizontal series of dots, each of which corresponds to a page in the app’s document or other data-model entity. You customize a page control by setting its tint color for all the page indicator dots, and for the current page indicator dot. +Use a `UIPageControl` to structure an app's user interface. A page control is a specialized control that displays a horizontal series of dots, each of which corresponds to a page in the app’s document or other data-model entity. Customize a page control by setting its tint color for all the page-indicator dots, and for the current page-indicator dot. The `configurePageControl` function sets up a customized page control: @@ -210,7 +212,7 @@ func configurePageControl() { ## Add Menus to Your Controls -You can attach menus to controls like `UIButton` and `UIBarButtonItem`. Create menus with the [`UIAction`](https://developer.apple.com/documentation/uikit/uiaction) class, and attach a menu to each control by setting the [`UIMenu`](https://developer.apple.com/documentation/uikit/uimenu) property. +Attach menus to controls like `UIButton` and `UIBarButtonItem`. Create menus with the [`UIAction`](https://developer.apple.com/documentation/uikit/uiaction) class, and attach a menu to each control by setting the [`UIMenu`](https://developer.apple.com/documentation/uikit/uimenu) property. Attach a menu to a `UIButton` as shown here: @@ -239,4 +241,14 @@ var customTitleBarButtonItem: UIBarButtonItem { } ``` +## Support Mac Catalyst +This sample app is built with Mac Catalyst, which means the sample runs on both iPad and Mac. This is achieved by selecting the Mac checkbox in Project Settings. For more about how Mac Catalyst works see [Mac Catalyst](https://developer.apple.com/mac-catalyst/). + +When built for Mac Catalyst, this sample achieves: + +* Interface Optimization for Mac — With Optimize Interface For the Mac project setting turned on, the app has full control of every pixel on the screen, and the app can adopt more controls specific to Mac. Building the sample for Mac Catalyst makes the app take advantage of the system features in macOS. The option Show Designed for iPad Run Destination allows this sample, as an iPad app, to run "as-is" on Apple silicon Macs. This requires macOS 11 and a Mac with Apple silicon. + +* Navigation and title bar hiding — The sample app hides these to make the app appear more like a Mac app. It also changes other behaviors by using traitCollection's `userInterfaceIdiom` or the compilation conditional block that uses the `targetEnvironment():` platform condition. + +* Translucent background — By setting the split view controller's `primaryBackgroundStyle` to `.sidebar`, the primary view controller or side bar shows a blurred desktop behind its view. Setting this property has no effect when running in iOS. diff --git a/UIKitCatalog.xcodeproj/project.pbxproj b/UIKitCatalog.xcodeproj/project.pbxproj index aaf177c..7d1d2fe 100644 --- a/UIKitCatalog.xcodeproj/project.pbxproj +++ b/UIKitCatalog.xcodeproj/project.pbxproj @@ -838,9 +838,10 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Debug; }; @@ -860,9 +861,10 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = "1,2,6"; }; name = Release; }; diff --git a/UIKitCatalog/ActivityIndicatorViewController.swift b/UIKitCatalog/ActivityIndicatorViewController.swift index b51065f..4c30f20 100755 --- a/UIKitCatalog/ActivityIndicatorViewController.swift +++ b/UIKitCatalog/ActivityIndicatorViewController.swift @@ -50,4 +50,35 @@ class ActivityIndicatorViewController: UITableViewController { tintedSmallActivityIndicatorView.startAnimating() tintedLargeActivityIndicatorView.startAnimating() } + + // MARK: - UITableViewDataSource + + override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { + #if targetEnvironment(macCatalyst) + // Don't show tinted activitiy indicator for macOS, it does not exist. + if section == 1 { + return "" + } else { + return super.tableView(tableView, titleForHeaderInSection: section) + } + #else + return super.tableView(tableView, titleForHeaderInSection: section) + #endif + } + + // MARK: - UITableViewDelegate + + override func tableView(_ tableView: UITableView, + heightForRowAt indexPath: IndexPath) -> CGFloat { + #if targetEnvironment(macCatalyst) + // Don't show tinted activity indicator for macOS, it does not exist. + if indexPath.section == 1 { + return 0 + } else { + return super.tableView(tableView, heightForRowAt: indexPath) + } + #else + return super.tableView(tableView, heightForRowAt: indexPath) + #endif + } } diff --git a/UIKitCatalog/AlertControllerViewController.swift b/UIKitCatalog/AlertControllerViewController.swift index b88dbc2..ee07eb8 100755 --- a/UIKitCatalog/AlertControllerViewController.swift +++ b/UIKitCatalog/AlertControllerViewController.swift @@ -115,8 +115,6 @@ class AlertControllerViewController: UITableViewController { func showTextEntryAlert() { let title = NSLocalizedString("A Short Title is Best", comment: "") let message = NSLocalizedString("A message should be a short, complete sentence.", comment: "") - let cancelButtonTitle = NSLocalizedString("Cancel", comment: "") - let otherButtonTitle = NSLocalizedString("OK", comment: "") let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) @@ -126,10 +124,12 @@ class AlertControllerViewController: UITableViewController { } // Create the actions. + let cancelButtonTitle = NSLocalizedString("Cancel", comment: "") let cancelAction = UIAlertAction(title: cancelButtonTitle, style: .cancel) { _ in print("The \"Text Entry\" alert's cancel action occurred.") } + let otherButtonTitle = NSLocalizedString("OK", comment: "") let otherAction = UIAlertAction(title: otherButtonTitle, style: .default) { _ in print("The \"Text Entry\" alert's other action occurred.") } diff --git a/UIKitCatalog/Assets.xcassets/Contents.json b/UIKitCatalog/Assets.xcassets/Contents.json index da4a164..73c0059 100755 --- a/UIKitCatalog/Assets.xcassets/Contents.json +++ b/UIKitCatalog/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/Contents.json b/UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/Contents.json deleted file mode 100755 index b44a280..0000000 --- a/UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "increment_disabled_1x.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "increment_disabled_2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "stepper_increment_disabled_3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/increment_disabled_1x.png b/UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/increment_disabled_1x.png deleted file mode 100755 index 70525912c2750d9f52b325e59c6d350b8a1e27be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1352 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m@_g%B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}dEo2#LV znVGAxk%5_op`nGdp^1~Zlevk3rG=}dfg{WeYHGxhOTUB)=#mKR*YS0s=DfOY(~| z@(UE4gUu8)d=ry1^FRWcpa_Ea*Cn+mvn(~mttdZN0UW|snOIyv*yj+vDddEjKF~4x zpyYv+Twp@LGzenC6F-mx&pxSnz&uj~%pAJ@5gQp87|T3e978H@Jqg|Ib;LnrZ)J`H z(=@JwNn1Y(`#jt(_{7)x5jTGbev4*3y~Sx?f@1H4L#-T&?{gmQG?*wj$v~`; zm7Oo;-5p@E{(jEo^{&2W5>{tT(v;1Xi{0L)D!SUlS2_0j)y~@c%PsmUFY7MrSK7lk z@AsU)b^d*iC%oSE>PY6Sph+qz62~N$Wef5>owF=cR`+1r$x-%+y2P73QkQu z`H@>EzH^K22ff?rx69bJzSLj0a`MwkxwmE3?;cnC#Jm1rt(fpzA}M2Q)XMVKFPD@x zb9iO{9^TPXb+y4vE$xg~@Y82ZKRm)0eY$!=QR(TUkE}{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIVr6XP=4$9- zX69;aWMF1tXlUVVXyRnE=i z?xTtUQFC@_h_)w~$L`|t&T2Jk34g<-ybaB*-}1#&z-y93xfn$HuxzD8ZZh2QGvv+b%zTqSX=`a9e%zdcFO;m z@<-KnIPXn+I{Wl@gckdH3}0AD_3Hax!f>+dE9s@@J&GXht9K%g_oZe zE_0nzpxwSx=k%wI9NWA5g_+$9)DJdw-wfE4qqM_+`4OY$-6}EH?xc z6L_C*{k6wy3q!R%hM{UK+Hq zMLTBw_1~V8dD)sbyfS=ndWuQ^isxsTWs0w6nL6A^x>j&%zNhwqv~#MCds#riwqBy( zA*;YXkHmDf&2Q%L+L%vz6MtgX<)+x+jcRt+{NF4N`BAt1TT|6z$%(601*{G0W{e9H h00(&b@pcAghWw`&3UAE|o(n2IJzf1=);T3K0RV)a7q9>T diff --git a/UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/stepper_increment_disabled_3x.png b/UIKitCatalog/Assets.xcassets/stepper_increment_disabled.imageset/stepper_increment_disabled_3x.png deleted file mode 100755 index a855e59256922b035ebd584aa9656f97f703fc9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3037 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 QRY4`Cr>mdKI;Vst0JyOOE&u=k diff --git a/UIKitCatalog/Assets.xcassets/stepper_increment_highlighted.imageset/stepper_increment_highlighted_3x.png b/UIKitCatalog/Assets.xcassets/stepper_increment_highlighted.imageset/stepper_increment_highlighted_3x.png deleted file mode 100755 index 3d416b3a6fa0780d0e7726f74b3dda89eb5d7ad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3030 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 SZ>@GZ0#idPgBqAi)V~3$UW - - + + - + @@ -13,7 +13,7 @@ - + @@ -27,7 +27,7 @@ @@ -44,7 +44,7 @@ @@ -61,7 +61,7 @@ @@ -78,7 +78,7 @@ @@ -95,7 +95,7 @@ @@ -116,7 +116,7 @@ @@ -133,7 +133,7 @@ @@ -156,4 +156,9 @@ + + + + + diff --git a/UIKitCatalog/Base.lproj/ButtonViewController.storyboard b/UIKitCatalog/Base.lproj/ButtonViewController.storyboard index acc1027..0009829 100755 --- a/UIKitCatalog/Base.lproj/ButtonViewController.storyboard +++ b/UIKitCatalog/Base.lproj/ButtonViewController.storyboard @@ -2,7 +2,6 @@ - @@ -89,18 +88,13 @@ - - - + + @@ -203,7 +197,7 @@ - + @@ -214,7 +208,7 @@ - + diff --git a/UIKitCatalog/Base.lproj/ColorPickerViewController.storyboard b/UIKitCatalog/Base.lproj/ColorPickerViewController.storyboard index 9fee52f..55e9ee6 100755 --- a/UIKitCatalog/Base.lproj/ColorPickerViewController.storyboard +++ b/UIKitCatalog/Base.lproj/ColorPickerViewController.storyboard @@ -1,8 +1,8 @@ - + - + @@ -16,35 +16,54 @@ - - + - - + + + + + + + + + + + - - - - + + + + + + + - + + + + + + + + + diff --git a/UIKitCatalog/Base.lproj/FontPickerViewController.storyboard b/UIKitCatalog/Base.lproj/FontPickerViewController.storyboard index 3459af1..b28c89f 100755 --- a/UIKitCatalog/Base.lproj/FontPickerViewController.storyboard +++ b/UIKitCatalog/Base.lproj/FontPickerViewController.storyboard @@ -1,8 +1,8 @@ - + - + @@ -17,18 +17,25 @@ + @@ -36,17 +43,20 @@ - - - - - + + + + + + + + diff --git a/UIKitCatalog/Base.lproj/Localizable.strings b/UIKitCatalog/Base.lproj/Localizable.strings index a1732cc..162abdc 100755 --- a/UIKitCatalog/Base.lproj/Localizable.strings +++ b/UIKitCatalog/Base.lproj/Localizable.strings @@ -77,4 +77,5 @@ Strings used across the application via the NSLocalizedString API. "DefaultPageControlTitle" = "Page Control"; "CustomPageControlTitle" = "Custom Page Control"; +"SwitchTitle" = "Title"; diff --git a/UIKitCatalog/Base.lproj/StackViewController.storyboard b/UIKitCatalog/Base.lproj/StackViewController.storyboard index b42b729..a3b3d88 100755 --- a/UIKitCatalog/Base.lproj/StackViewController.storyboard +++ b/UIKitCatalog/Base.lproj/StackViewController.storyboard @@ -1,9 +1,10 @@ - + - + + @@ -28,20 +29,20 @@ - + - -