diff --git a/README.md b/README.md index e6cfcfe..6b7b49c 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ UniLayout is a project to make multi-platform development easier for iOS and And The library is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your Podfile. ```ruby -pod "UniLayout", '~> 0.1.0' +pod "UniLayout", '~> 0.1.1' ``` @@ -29,7 +29,7 @@ pod "UniLayout", '~> 0.1.0' When using gradle, the library can easily be imported into the build.gradle file of your project. Add the following dependency: ``` -compile 'com.crescentflare.unilayout:UniLayoutLib:0.1.0' +compile 'com.crescentflare.unilayout:UniLayoutLib:0.1.1' ``` Make sure that jcenter is added as a repository. diff --git a/UniLayout.podspec b/UniLayout.podspec index 3903dd2..b7b5ee3 100644 --- a/UniLayout.podspec +++ b/UniLayout.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'UniLayout' - s.version = '0.1.0' + s.version = '0.1.1' s.summary = 'A uniform layout system for iOS and Android.' # This description is used to generate tags and improve search results. @@ -32,9 +32,9 @@ A uniform layout system for both iOS and Android. Based on the layout container s.source_files = 'UniLayoutIOS/UniLayout/Classes/**/*' - # s.resource_bundles = { - # 'UniLayout' => ['UniLayout/Assets/*.png'] - # } + s.resource_bundles = { + 'UniLayout' => ['UniLayoutIOS/UniLayout/Assets/**/*'] + } # s.public_header_files = 'Pod/Classes/**/*.h' # s.frameworks = 'UIKit', 'MapKit' diff --git a/UniLayoutAndroid/UniLayoutLib/build.gradle b/UniLayoutAndroid/UniLayoutLib/build.gradle index 3d99890..beb9fc7 100644 --- a/UniLayoutAndroid/UniLayoutLib/build.gradle +++ b/UniLayoutAndroid/UniLayoutLib/build.gradle @@ -13,7 +13,7 @@ ext { siteUrl = 'https://github.com/crescentflare/UniLayout' gitUrl = 'https://github.com/crescentflare/UniLayout.git' - libraryVersion = '0.1.0' + libraryVersion = '0.1.1' developerId = 'crescentflare' developerName = 'Johan Bos' @@ -32,7 +32,7 @@ android { minSdkVersion 9 targetSdkVersion 22 versionCode 1 - versionName "0.1.0" + versionName "0.1.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } diff --git a/UniLayoutAndroid/UniLayoutLib/src/main/java/com/crescentflare/unilayout/views/UniTextView.java b/UniLayoutAndroid/UniLayoutLib/src/main/java/com/crescentflare/unilayout/views/UniTextView.java index 417c11f..db5c53c 100644 --- a/UniLayoutAndroid/UniLayoutLib/src/main/java/com/crescentflare/unilayout/views/UniTextView.java +++ b/UniLayoutAndroid/UniLayoutLib/src/main/java/com/crescentflare/unilayout/views/UniTextView.java @@ -2,11 +2,14 @@ import android.content.Context; import android.util.AttributeSet; +import android.view.ViewGroup; import android.widget.TextView; +import com.crescentflare.unilayout.helpers.UniLayoutParams; + /** * UniLayout view: a view with simple text - * Extends TextView, currently it's just an alias to have the same name as the iOS class + * Extends TextView, includes a workaround to get text alignment to work with minimum width */ public class UniTextView extends TextView { @@ -38,4 +41,16 @@ public UniTextView(Context context, AttributeSet attrs, int defStyleAttr, int de private void init(AttributeSet attrs) { } + + + // --- + // Override layout to force re-measure (to get text alignment to work properly) + // --- + + @Override + public void layout(int left, int top, int right, int bottom) + { + measure(MeasureSpec.makeMeasureSpec(right - left, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(bottom - top, MeasureSpec.EXACTLY)); + super.layout(left, top, right, bottom); + } } diff --git a/UniLayoutIOS/Example/Podfile.lock b/UniLayoutIOS/Example/Podfile.lock index 0a850ca..9c97c00 100644 --- a/UniLayoutIOS/Example/Podfile.lock +++ b/UniLayoutIOS/Example/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - UniLayout (0.1.0) + - UniLayout (0.1.1) DEPENDENCIES: - UniLayout (from `../../`) @@ -9,7 +9,7 @@ EXTERNAL SOURCES: :path: ../../ SPEC CHECKSUMS: - UniLayout: 89449a3174e0d42acea1907cc336c3295e1fc683 + UniLayout: 0e83d02500494db9bd8f1ea19b764e02c301a2a5 PODFILE CHECKSUM: c5be050806aea14e5154eac8062c6c6830d64e24 diff --git a/UniLayoutIOS/Example/Pods/Local Podspecs/UniLayout.podspec.json b/UniLayoutIOS/Example/Pods/Local Podspecs/UniLayout.podspec.json index e3f3edb..0f0d2f4 100644 --- a/UniLayoutIOS/Example/Pods/Local Podspecs/UniLayout.podspec.json +++ b/UniLayoutIOS/Example/Pods/Local Podspecs/UniLayout.podspec.json @@ -1,6 +1,6 @@ { "name": "UniLayout", - "version": "0.1.0", + "version": "0.1.1", "summary": "A uniform layout system for iOS and Android.", "description": "A uniform layout system for both iOS and Android. Based on the layout container system from Android (like LinearLayout and FrameLayout).", "homepage": "https://github.com/crescentflare/UniLayout", @@ -13,10 +13,15 @@ }, "source": { "git": "https://github.com/crescentflare/UniLayout.git", - "tag": "0.1.0" + "tag": "0.1.1" }, "platforms": { "ios": "8.0" }, - "source_files": "UniLayoutIOS/UniLayout/Classes/**/*" + "source_files": "UniLayoutIOS/UniLayout/Classes/**/*", + "resource_bundles": { + "UniLayout": [ + "UniLayoutIOS/UniLayout/Assets/**/*" + ] + } } diff --git a/UniLayoutIOS/Example/Pods/Manifest.lock b/UniLayoutIOS/Example/Pods/Manifest.lock index 0a850ca..9c97c00 100644 --- a/UniLayoutIOS/Example/Pods/Manifest.lock +++ b/UniLayoutIOS/Example/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - UniLayout (0.1.0) + - UniLayout (0.1.1) DEPENDENCIES: - UniLayout (from `../../`) @@ -9,7 +9,7 @@ EXTERNAL SOURCES: :path: ../../ SPEC CHECKSUMS: - UniLayout: 89449a3174e0d42acea1907cc336c3295e1fc683 + UniLayout: 0e83d02500494db9bd8f1ea19b764e02c301a2a5 PODFILE CHECKSUM: c5be050806aea14e5154eac8062c6c6830d64e24 diff --git a/UniLayoutIOS/Example/Pods/Pods.xcodeproj/project.pbxproj b/UniLayoutIOS/Example/Pods/Pods.xcodeproj/project.pbxproj index 4151a5d..51270ac 100644 --- a/UniLayoutIOS/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/UniLayoutIOS/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,29 +7,39 @@ objects = { /* Begin PBXBuildFile section */ - 13ED7FABF6ECD24CE7A09F0342A434EC /* UniFrameContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B3C2C2DEFBC1283F343D9305B0A1CC9 /* UniFrameContainer.swift */; }; + 07D6396037542C58D121D205D71D64B2 /* UniFrameContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964AEF7D2B2CA1CFDACBB6886F2CFDE5 /* UniFrameContainer.swift */; }; + 158909C67BBC6E6B2E0C699D668E0ADD /* UniButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D617655FC541D9D165645F00B398B581 /* UniButtonView.swift */; }; + 1FE1E4BA87C0509B371ED8D76FABE6C5 /* UniTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6DF40073859128CDFB084B25727E082 /* UniTextView.swift */; }; 259E583035846272A0E21892F17669E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; + 2704539DB30826A2676A48429B428634 /* UniHorizontalScrollContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 735016BCF0B71196DA3B0951FF41CA50 /* UniHorizontalScrollContainer.swift */; }; + 344A3B3D413888C9BDC58607327A2B25 /* UniImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC1CB32411A2F066A7A3B1450207808 /* UniImageView.swift */; }; 3785332679A1AB0A9816904C024AE811 /* Pods-UniLayout_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB15B1CB5A7E35A17279240B2FBCA4A /* Pods-UniLayout_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39F459CAD45FD04FC5476A5BEAC3BDF0 /* UniView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439FECA2FB20F320D16AF621DE9B2108 /* UniView.swift */; }; - 4F9D5DDCD912F0B616FF4D54D4C0C2EA /* UniVerticalScrollContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F141FA79F547C13EBC27410B67A291 /* UniVerticalScrollContainer.swift */; }; + 423EAE827D804A22F202EEA1245BECB0 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6B6BE221067DF32D4C3BA3BF3EE3657E /* Images.xcassets */; }; + 5468B1A73F9B5634F12CD4F4AB2BFE84 /* UniLinearContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CAB513C44FD63C49B45141B3E7920F4 /* UniLinearContainer.swift */; }; 56C92346191D933CA3D815510BA7449D /* Pods-UniLayout_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 93762A67D954A4D29F5D95DAB0E8F876 /* Pods-UniLayout_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57927B58DCE9F27337CBAFA9E08C65DF /* UniLayoutProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21E0C902A60138B97EC1D564DE039BCC /* UniLayoutProperties.swift */; }; - 664ED64CD8750E9D91D5896E0616D1B0 /* UniLayout-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CF9BA1667E0CD307FBA4A845CB5E642 /* UniLayout-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 734D8773ECE8509817D78F905B42818A /* UniReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3B131426C9383DCB7B4BEA9A6CEEDCF /* UniReusableView.swift */; }; - 793874313C2344C16CC3E2D4E5F13106 /* UniReusingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F146DD8256B31B313FF1E5E9C0E3E44A /* UniReusingContainer.swift */; }; + 5CE521D753C5F0BF3AA17F7BD906E641 /* UniView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 421E35577C078D81F5287867DB8572C5 /* UniView.swift */; }; + 664ED64CD8750E9D91D5896E0616D1B0 /* UniLayout-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 280FC561093C2309CF9F19E9F31AA8BB /* UniLayout-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68E37E748915CA87E55B31951BB47096 /* UniReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965BB45923B70682C0A118B905884AAA /* UniReusableView.swift */; }; 7F2036EAB41AC92A1979C59230D99336 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; 911460F83A3F653F50419C4F0E83EE4B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; - 940F3054290B48D80EA0E290214EB548 /* UniLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 68067F340683CC7D3A4D6DB7442EA76E /* UniLayout-dummy.m */; }; - 9A38F25A44336E3A8FDDEAE9DBE21B04 /* UniLinearContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C282D90CA475D42E5A66378CE7A2BDE /* UniLinearContainer.swift */; }; - C1A8F8A6E87B594B788B093852C6F635 /* UniHorizontalScrollContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC620672052967812B23659FBE59CFAD /* UniHorizontalScrollContainer.swift */; }; + BA673071B7F700DE2FA56B226AABC9CE /* UniReusingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 008163D36C91CBCB9133C7350619C9BC /* UniReusingContainer.swift */; }; + BB3119E7F1037A7615BA9ED877DDFF14 /* UniLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD7E45B0753E4FA0D389E4833294CA5 /* UniLayout-dummy.m */; }; + BD31B3F28096BF59AC932876B6B9F612 /* UniVerticalScrollContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC8C6A759DC3C8AE42D5F12B01FF950 /* UniVerticalScrollContainer.swift */; }; C5C3174A232D4E986D5E289358BA6641 /* Pods-UniLayout_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FD50CA0B4531123F16A13E283D6F792 /* Pods-UniLayout_Tests-dummy.m */; }; + CF078F39E1134A3EC3E3D7D98A934CE5 /* UniLayoutProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F7CEA676B683B84D84437ACCB5A28B5 /* UniLayoutProperties.swift */; }; D7AFF8CBAEFA8B887119BC88374B2D1E /* Pods-UniLayout_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 70E6EEEF5CAA0502AB9DBDC9F7D4B21A /* Pods-UniLayout_Example-dummy.m */; }; - E5AA78C07320296327137CD0C25CF46C /* UniImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5300712836D8ECBDBBF4135E3E753A /* UniImageView.swift */; }; - E8F892658A0A26CD987EEAB8F6DF5E87 /* UniTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06C7EB1865456DD312E028292DE4D13F /* UniTextView.swift */; }; - F5C0F08DB7200AFDC2466ED6B2D66FAC /* UniButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133065641C52B77AC188006B7AC22820 /* UniButtonView.swift */; }; + EAE0E15B0B3539E3DF8D5A6050793CE3 /* UniLayout.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 43152669D9C7E33718DF7EC287829EB8 /* UniLayout.bundle */; }; + F2DF2F4A7BCB8D1EC2937FE6B8F6D36A /* UniAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0ED70E4CBE26C91C8773C975B018D71 /* UniAssets.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 376112ED5E5B9C730B0DF68D5AD32697 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = CDCC72601C49915136167A7F35C35A2A; + remoteInfo = "UniLayout-UniLayout"; + }; 9BC6732E0A24915180D1118B2704A5A0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -40,51 +50,62 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 008163D36C91CBCB9133C7350619C9BC /* UniReusingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniReusingContainer.swift; sourceTree = ""; }; 05FA6EECAAE60F6D42CB2026286FB2D4 /* Pods-UniLayout_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-UniLayout_Example-acknowledgements.markdown"; sourceTree = ""; }; - 06C7EB1865456DD312E028292DE4D13F /* UniTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniTextView.swift; sourceTree = ""; }; - 09F141FA79F547C13EBC27410B67A291 /* UniVerticalScrollContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniVerticalScrollContainer.swift; sourceTree = ""; }; + 087537200BB55873EC568634AD7478BF /* UniLayout.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = UniLayout.modulemap; sourceTree = ""; }; 12948A88F8C48F337688B14C7D50A957 /* Pods-UniLayout_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-UniLayout_Tests-resources.sh"; sourceTree = ""; }; - 133065641C52B77AC188006B7AC22820 /* UniButtonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniButtonView.swift; sourceTree = ""; }; - 2107446A715D68283557CD35771F0C00 /* UniLayout.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = UniLayout.modulemap; sourceTree = ""; }; - 21E0C902A60138B97EC1D564DE039BCC /* UniLayoutProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniLayoutProperties.swift; sourceTree = ""; }; - 2B30CCEED8964CC990997969E84B195E /* UniLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UniLayout.xcconfig; sourceTree = ""; }; + 1365CD6B35D1860278EBF18B84A0A7A7 /* UniLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UniLayout.xcconfig; sourceTree = ""; }; + 1FD7E45B0753E4FA0D389E4833294CA5 /* UniLayout-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UniLayout-dummy.m"; sourceTree = ""; }; + 207CE2A50877C408817B7354BC158575 /* UniLayout.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = UniLayout.framework; path = UniLayout.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 280FC561093C2309CF9F19E9F31AA8BB /* UniLayout-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UniLayout-umbrella.h"; sourceTree = ""; }; + 2F7CEA676B683B84D84437ACCB5A28B5 /* UniLayoutProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniLayoutProperties.swift; sourceTree = ""; }; + 35636105EC4F2790A85E5297CA239449 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3C8CC03DCFB3E794116C5B30BD2044DB /* Pods-UniLayout_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-UniLayout_Tests.debug.xcconfig"; sourceTree = ""; }; 3DDAEC65450F9ADBCE3CAA7F82D82110 /* Pods-UniLayout_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-UniLayout_Example.debug.xcconfig"; sourceTree = ""; }; 3FD50CA0B4531123F16A13E283D6F792 /* Pods-UniLayout_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-UniLayout_Tests-dummy.m"; sourceTree = ""; }; - 439FECA2FB20F320D16AF621DE9B2108 /* UniView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniView.swift; sourceTree = ""; }; + 421E35577C078D81F5287867DB8572C5 /* UniView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniView.swift; sourceTree = ""; }; + 43152669D9C7E33718DF7EC287829EB8 /* UniLayout.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = UniLayout.bundle; path = UniLayout.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 50F6CF48340D9CEB925C6030BFCF3A4F /* Pods-UniLayout_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-UniLayout_Example.release.xcconfig"; sourceTree = ""; }; 5B25B8765486C19C98D03FED67B6FBAA /* Pods-UniLayout_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-UniLayout_Tests-frameworks.sh"; sourceTree = ""; }; + 5CAB513C44FD63C49B45141B3E7920F4 /* UniLinearContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniLinearContainer.swift; sourceTree = ""; }; 62A336CA47933759B050614F5F1FA501 /* Pods-UniLayout_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-UniLayout_Tests.modulemap"; sourceTree = ""; }; - 68067F340683CC7D3A4D6DB7442EA76E /* UniLayout-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UniLayout-dummy.m"; sourceTree = ""; }; - 6CF9BA1667E0CD307FBA4A845CB5E642 /* UniLayout-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UniLayout-umbrella.h"; sourceTree = ""; }; + 6B6BE221067DF32D4C3BA3BF3EE3657E /* Images.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 70E6EEEF5CAA0502AB9DBDC9F7D4B21A /* Pods-UniLayout_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-UniLayout_Example-dummy.m"; sourceTree = ""; }; - 7C282D90CA475D42E5A66378CE7A2BDE /* UniLinearContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniLinearContainer.swift; sourceTree = ""; }; + 735016BCF0B71196DA3B0951FF41CA50 /* UniHorizontalScrollContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniHorizontalScrollContainer.swift; sourceTree = ""; }; + 766362057B969AC6AC1AEB604584FC4E /* UniLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UniLayout-prefix.pch"; sourceTree = ""; }; 7F36921A186ADB9846F5D9D4EA5DE96B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8034F61E0BF26607EF90F07E7DE14C85 /* Pods_UniLayout_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_UniLayout_Example.framework; path = "Pods-UniLayout_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 8C901538A874F486609787DAD43FF761 /* Pods-UniLayout_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-UniLayout_Example.modulemap"; sourceTree = ""; }; 93762A67D954A4D29F5D95DAB0E8F876 /* Pods-UniLayout_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-UniLayout_Example-umbrella.h"; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9B3C2C2DEFBC1283F343D9305B0A1CC9 /* UniFrameContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniFrameContainer.swift; sourceTree = ""; }; + 964AEF7D2B2CA1CFDACBB6886F2CFDE5 /* UniFrameContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniFrameContainer.swift; sourceTree = ""; }; + 965BB45923B70682C0A118B905884AAA /* UniReusableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniReusableView.swift; sourceTree = ""; }; AD660B68A837B50EEA80E4E2664E1B8A /* Pods-UniLayout_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-UniLayout_Tests-acknowledgements.markdown"; sourceTree = ""; }; + B0E44034A9AC5A209EA7313E19B9CE8A /* ResourceBundle-UniLayout-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-UniLayout-Info.plist"; sourceTree = ""; }; + B317D3E74C7361EFDFBB4737D997C69F /* Pods_UniLayout_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_UniLayout_Tests.framework; path = "Pods-UniLayout_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; B31EBCA89804E46FC3AF9FB7BD6D2C9C /* Pods-UniLayout_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-UniLayout_Example-resources.sh"; sourceTree = ""; }; - B6F8DF92E3417C19F70646A5015D8B86 /* Pods_UniLayout_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_UniLayout_Tests.framework; path = "Pods-UniLayout_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - B9D404FDDD0E60623A8C0F5FAA0F74B0 /* UniLayout.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = UniLayout.framework; path = UniLayout.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BE314943C6A3D17F10D52F6123B1FB69 /* Pods-UniLayout_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-UniLayout_Tests.release.xcconfig"; sourceTree = ""; }; CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + CFC1CB32411A2F066A7A3B1450207808 /* UniImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniImageView.swift; sourceTree = ""; }; + D0ED70E4CBE26C91C8773C975B018D71 /* UniAssets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniAssets.swift; sourceTree = ""; }; D11872932E5D12135630A29C8B756A36 /* Pods-UniLayout_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-UniLayout_Tests-acknowledgements.plist"; sourceTree = ""; }; - D287E6C3147754E8A2D0C5F84CE9291A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DB5300712836D8ECBDBBF4135E3E753A /* UniImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniImageView.swift; sourceTree = ""; }; + D617655FC541D9D165645F00B398B581 /* UniButtonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniButtonView.swift; sourceTree = ""; }; + DDE75BA20748F38396D6042A954BE63F /* Pods_UniLayout_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_UniLayout_Example.framework; path = "Pods-UniLayout_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + DEC8C6A759DC3C8AE42D5F12B01FF950 /* UniVerticalScrollContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniVerticalScrollContainer.swift; sourceTree = ""; }; E0189D4EE6E504A0AAFB727B6C2F156B /* Pods-UniLayout_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-UniLayout_Example-acknowledgements.plist"; sourceTree = ""; }; - E3B131426C9383DCB7B4BEA9A6CEEDCF /* UniReusableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniReusableView.swift; sourceTree = ""; }; EAB15B1CB5A7E35A17279240B2FBCA4A /* Pods-UniLayout_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-UniLayout_Tests-umbrella.h"; sourceTree = ""; }; - EC620672052967812B23659FBE59CFAD /* UniHorizontalScrollContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniHorizontalScrollContainer.swift; sourceTree = ""; }; - F146DD8256B31B313FF1E5E9C0E3E44A /* UniReusingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniReusingContainer.swift; sourceTree = ""; }; F57C20104541F0D12FD4BD0C21648933 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F5A2BBF5C5AAA91BE18AE53AFFC713F1 /* Pods-UniLayout_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-UniLayout_Example-frameworks.sh"; sourceTree = ""; }; - F7C2C4DBB60075A7ABBCE975120476EC /* UniLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UniLayout-prefix.pch"; sourceTree = ""; }; + F6DF40073859128CDFB084B25727E082 /* UniTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UniTextView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 107033C7A18C28D3F39E1497C71FA269 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C26C6D72D26C83DF7175FE68E8213299 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -112,26 +133,37 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0AB30BB9035801A03FA48AB79D9E9FC7 /* views */ = { + 05CB322DC2AFE81ADC39F736E1BD9292 /* UniLayoutIOS */ = { isa = PBXGroup; children = ( - 133065641C52B77AC188006B7AC22820 /* UniButtonView.swift */, - DB5300712836D8ECBDBBF4135E3E753A /* UniImageView.swift */, - E3B131426C9383DCB7B4BEA9A6CEEDCF /* UniReusableView.swift */, - 06C7EB1865456DD312E028292DE4D13F /* UniTextView.swift */, - 439FECA2FB20F320D16AF621DE9B2108 /* UniView.swift */, + FF95212C5E34703C273E0D12D6B0E598 /* UniLayout */, ); - name = views; - path = views; + name = UniLayoutIOS; + path = UniLayoutIOS; sourceTree = ""; }; - 21286E2BE27F64B64C519613F462FE34 /* helpers */ = { + 0C1D892B46DA6B6B26E2D33C486400D9 /* utility */ = { isa = PBXGroup; children = ( - 21E0C902A60138B97EC1D564DE039BCC /* UniLayoutProperties.swift */, + D0ED70E4CBE26C91C8773C975B018D71 /* UniAssets.swift */, ); - name = helpers; - path = helpers; + name = utility; + path = utility; + sourceTree = ""; + }; + 0E01CDAE4AFF41277B7A28B43B0BE5F7 /* Support Files */ = { + isa = PBXGroup; + children = ( + 35636105EC4F2790A85E5297CA239449 /* Info.plist */, + B0E44034A9AC5A209EA7313E19B9CE8A /* ResourceBundle-UniLayout-Info.plist */, + 087537200BB55873EC568634AD7478BF /* UniLayout.modulemap */, + 1365CD6B35D1860278EBF18B84A0A7A7 /* UniLayout.xcconfig */, + 1FD7E45B0753E4FA0D389E4833294CA5 /* UniLayout-dummy.m */, + 766362057B969AC6AC1AEB604584FC4E /* UniLayout-prefix.pch */, + 280FC561093C2309CF9F19E9F31AA8BB /* UniLayout-umbrella.h */, + ); + name = "Support Files"; + path = "UniLayoutIOS/Example/Pods/Target Support Files/UniLayout"; sourceTree = ""; }; 493C45D74B763B85D3831F5F3BF920C9 /* Pods-UniLayout_Example */ = { @@ -152,56 +184,56 @@ path = "Target Support Files/Pods-UniLayout_Example"; sourceTree = ""; }; - 56E1FC2DAABD334A46F0335F3E6344A7 /* UniLayout */ = { + 5182DFE1BDAD88937ABA3180B12C174D /* helpers */ = { isa = PBXGroup; children = ( - 749A0FC0723018263AB604B3C7393588 /* Support Files */, - 65845BE75695E3D5135304EA6A8573A2 /* UniLayoutIOS */, + 2F7CEA676B683B84D84437ACCB5A28B5 /* UniLayoutProperties.swift */, ); - name = UniLayout; - path = ../../..; + name = helpers; + path = helpers; sourceTree = ""; }; - 57AFD352678CD93BE87DB4E12136AF7D /* Products */ = { + 5345403B7DCB0F14ABE4EBC1522CC164 /* UniLayoutIOS */ = { isa = PBXGroup; children = ( - 8034F61E0BF26607EF90F07E7DE14C85 /* Pods_UniLayout_Example.framework */, - B6F8DF92E3417C19F70646A5015D8B86 /* Pods_UniLayout_Tests.framework */, - B9D404FDDD0E60623A8C0F5FAA0F74B0 /* UniLayout.framework */, + 5C5D62DCC16F4C4F04914F2BAB201BE1 /* UniLayout */, ); - name = Products; + name = UniLayoutIOS; + path = UniLayoutIOS; sourceTree = ""; }; - 597F6E3584F561939BA0C2F725E7D940 /* UniLayout */ = { + 59D2D1E881E5106CC0EB40D6B6AE7329 /* containers */ = { isa = PBXGroup; children = ( - 7F692EF3C668545D505550694BCCD0E5 /* Classes */, + 964AEF7D2B2CA1CFDACBB6886F2CFDE5 /* UniFrameContainer.swift */, + 735016BCF0B71196DA3B0951FF41CA50 /* UniHorizontalScrollContainer.swift */, + 5CAB513C44FD63C49B45141B3E7920F4 /* UniLinearContainer.swift */, + 008163D36C91CBCB9133C7350619C9BC /* UniReusingContainer.swift */, + DEC8C6A759DC3C8AE42D5F12B01FF950 /* UniVerticalScrollContainer.swift */, ); - name = UniLayout; - path = UniLayout; + name = containers; + path = containers; sourceTree = ""; }; - 65845BE75695E3D5135304EA6A8573A2 /* UniLayoutIOS */ = { + 5C5D62DCC16F4C4F04914F2BAB201BE1 /* UniLayout */ = { isa = PBXGroup; children = ( - 597F6E3584F561939BA0C2F725E7D940 /* UniLayout */, + 8B9D660005E7AB7A6BB91ADEF5FFC0FB /* Assets */, ); - name = UniLayoutIOS; - path = UniLayoutIOS; + name = UniLayout; + path = UniLayout; sourceTree = ""; }; - 749A0FC0723018263AB604B3C7393588 /* Support Files */ = { + 6C9D2FA3D02CB989B327140ACC87F602 /* Classes */ = { isa = PBXGroup; children = ( - D287E6C3147754E8A2D0C5F84CE9291A /* Info.plist */, - 2107446A715D68283557CD35771F0C00 /* UniLayout.modulemap */, - 2B30CCEED8964CC990997969E84B195E /* UniLayout.xcconfig */, - 68067F340683CC7D3A4D6DB7442EA76E /* UniLayout-dummy.m */, - F7C2C4DBB60075A7ABBCE975120476EC /* UniLayout-prefix.pch */, - 6CF9BA1667E0CD307FBA4A845CB5E642 /* UniLayout-umbrella.h */, + 59D2D1E881E5106CC0EB40D6B6AE7329 /* containers */, + 5182DFE1BDAD88937ABA3180B12C174D /* helpers */, + 0C1D892B46DA6B6B26E2D33C486400D9 /* utility */, + E272ED15A8D1C61836692D9DD3C86C40 /* views */, ); - name = "Support Files"; - path = "UniLayoutIOS/Example/Pods/Target Support Files/UniLayout"; + name = Classes; + path = Classes; sourceTree = ""; }; 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */ = { @@ -212,26 +244,35 @@ name = iOS; sourceTree = ""; }; + 762EF23745FEA91626D8DBD43035D36F /* UniLayout */ = { + isa = PBXGroup; + children = ( + AE17CEC0095B53AA12FE5C7524667A81 /* Resources */, + 0E01CDAE4AFF41277B7A28B43B0BE5F7 /* Support Files */, + 05CB322DC2AFE81ADC39F736E1BD9292 /* UniLayoutIOS */, + ); + name = UniLayout; + path = ../../..; + sourceTree = ""; + }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - C5ABA04648320E341E534A51CA3AB154 /* Development Pods */, + A83ACD946AD4BF516284C4CE9515A7F4 /* Development Pods */, BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, - 57AFD352678CD93BE87DB4E12136AF7D /* Products */, + F11DE95DB86C7701C3122DAA200CD11B /* Products */, A260B83A9589FE3E9CEAC2059C578816 /* Targets Support Files */, ); sourceTree = ""; }; - 7F692EF3C668545D505550694BCCD0E5 /* Classes */ = { + 8B9D660005E7AB7A6BB91ADEF5FFC0FB /* Assets */ = { isa = PBXGroup; children = ( - BB3EB79440BFE09C3542C7D0E656EA59 /* containers */, - 21286E2BE27F64B64C519613F462FE34 /* helpers */, - 0AB30BB9035801A03FA48AB79D9E9FC7 /* views */, + 6B6BE221067DF32D4C3BA3BF3EE3657E /* Images.xcassets */, ); - name = Classes; - path = Classes; + name = Assets; + path = Assets; sourceTree = ""; }; A260B83A9589FE3E9CEAC2059C578816 /* Targets Support Files */ = { @@ -243,17 +284,20 @@ name = "Targets Support Files"; sourceTree = ""; }; - BB3EB79440BFE09C3542C7D0E656EA59 /* containers */ = { + A83ACD946AD4BF516284C4CE9515A7F4 /* Development Pods */ = { isa = PBXGroup; children = ( - 9B3C2C2DEFBC1283F343D9305B0A1CC9 /* UniFrameContainer.swift */, - EC620672052967812B23659FBE59CFAD /* UniHorizontalScrollContainer.swift */, - 7C282D90CA475D42E5A66378CE7A2BDE /* UniLinearContainer.swift */, - F146DD8256B31B313FF1E5E9C0E3E44A /* UniReusingContainer.swift */, - 09F141FA79F547C13EBC27410B67A291 /* UniVerticalScrollContainer.swift */, + 762EF23745FEA91626D8DBD43035D36F /* UniLayout */, ); - name = containers; - path = containers; + name = "Development Pods"; + sourceTree = ""; + }; + AE17CEC0095B53AA12FE5C7524667A81 /* Resources */ = { + isa = PBXGroup; + children = ( + 5345403B7DCB0F14ABE4EBC1522CC164 /* UniLayoutIOS */, + ); + name = Resources; sourceTree = ""; }; BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { @@ -264,12 +308,17 @@ name = Frameworks; sourceTree = ""; }; - C5ABA04648320E341E534A51CA3AB154 /* Development Pods */ = { + E272ED15A8D1C61836692D9DD3C86C40 /* views */ = { isa = PBXGroup; children = ( - 56E1FC2DAABD334A46F0335F3E6344A7 /* UniLayout */, + D617655FC541D9D165645F00B398B581 /* UniButtonView.swift */, + CFC1CB32411A2F066A7A3B1450207808 /* UniImageView.swift */, + 965BB45923B70682C0A118B905884AAA /* UniReusableView.swift */, + F6DF40073859128CDFB084B25727E082 /* UniTextView.swift */, + 421E35577C078D81F5287867DB8572C5 /* UniView.swift */, ); - name = "Development Pods"; + name = views; + path = views; sourceTree = ""; }; E2E7194B3F7CC91CD42850668AA5344C /* Pods-UniLayout_Tests */ = { @@ -290,6 +339,26 @@ path = "Target Support Files/Pods-UniLayout_Tests"; sourceTree = ""; }; + F11DE95DB86C7701C3122DAA200CD11B /* Products */ = { + isa = PBXGroup; + children = ( + DDE75BA20748F38396D6042A954BE63F /* Pods_UniLayout_Example.framework */, + B317D3E74C7361EFDFBB4737D997C69F /* Pods_UniLayout_Tests.framework */, + 43152669D9C7E33718DF7EC287829EB8 /* UniLayout.bundle */, + 207CE2A50877C408817B7354BC158575 /* UniLayout.framework */, + ); + name = Products; + sourceTree = ""; + }; + FF95212C5E34703C273E0D12D6B0E598 /* UniLayout */ = { + isa = PBXGroup; + children = ( + 6C9D2FA3D02CB989B327140ACC87F602 /* Classes */, + ); + name = UniLayout; + path = UniLayout; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -324,17 +393,19 @@ isa = PBXNativeTarget; buildConfigurationList = E16EFF061B4D9457FF2F7F1553507F6C /* Build configuration list for PBXNativeTarget "UniLayout" */; buildPhases = ( - A95754CD89B7116548AF874DE35D7BAA /* Sources */, + 53270E69B3372B32ECE3B09BD6CEF378 /* Sources */, F6AE7F83A6A9603C3A2B8E4FE86FAFF9 /* Frameworks */, + 654B48F7164FAB09E419C5ACD8589C88 /* Resources */, 065F845F93F190EA489BBB39ABFC1132 /* Headers */, ); buildRules = ( ); dependencies = ( + F4463B3541931669BA47CFA8B989168E /* PBXTargetDependency */, ); name = UniLayout; productName = UniLayout; - productReference = B9D404FDDD0E60623A8C0F5FAA0F74B0 /* UniLayout.framework */; + productReference = 207CE2A50877C408817B7354BC158575 /* UniLayout.framework */; productType = "com.apple.product-type.framework"; }; 93F1716F6B76789D372198D0994522F3 /* Pods-UniLayout_Tests */ = { @@ -351,9 +422,26 @@ ); name = "Pods-UniLayout_Tests"; productName = "Pods-UniLayout_Tests"; - productReference = B6F8DF92E3417C19F70646A5015D8B86 /* Pods_UniLayout_Tests.framework */; + productReference = B317D3E74C7361EFDFBB4737D997C69F /* Pods_UniLayout_Tests.framework */; productType = "com.apple.product-type.framework"; }; + CDCC72601C49915136167A7F35C35A2A /* UniLayout-UniLayout */ = { + isa = PBXNativeTarget; + buildConfigurationList = F48B8765363D67CFE32FAC71E5E44E46 /* Build configuration list for PBXNativeTarget "UniLayout-UniLayout" */; + buildPhases = ( + 43AAD169BBE920FA3DCD23B9FA001F5E /* Sources */, + 107033C7A18C28D3F39E1497C71FA269 /* Frameworks */, + 5563DA23854A4BED2AC74F8D7782EC7B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "UniLayout-UniLayout"; + productName = "UniLayout-UniLayout"; + productReference = 43152669D9C7E33718DF7EC287829EB8 /* UniLayout.bundle */; + productType = "com.apple.product-type.bundle"; + }; F9D3DA1E9CE9BD878708AB5A1DC397A4 /* Pods-UniLayout_Example */ = { isa = PBXNativeTarget; buildConfigurationList = D1B8613B4718CDD839DCDA0E1EE5EF24 /* Build configuration list for PBXNativeTarget "Pods-UniLayout_Example" */; @@ -369,7 +457,7 @@ ); name = "Pods-UniLayout_Example"; productName = "Pods-UniLayout_Example"; - productReference = 8034F61E0BF26607EF90F07E7DE14C85 /* Pods_UniLayout_Example.framework */; + productReference = DDE75BA20748F38396D6042A954BE63F /* Pods_UniLayout_Example.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -389,17 +477,37 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 57AFD352678CD93BE87DB4E12136AF7D /* Products */; + productRefGroup = F11DE95DB86C7701C3122DAA200CD11B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( F9D3DA1E9CE9BD878708AB5A1DC397A4 /* Pods-UniLayout_Example */, 93F1716F6B76789D372198D0994522F3 /* Pods-UniLayout_Tests */, 2961402EFE9B1E6BABAC8EFD4F6731C4 /* UniLayout */, + CDCC72601C49915136167A7F35C35A2A /* UniLayout-UniLayout */, ); }; /* End PBXProject section */ +/* Begin PBXResourcesBuildPhase section */ + 5563DA23854A4BED2AC74F8D7782EC7B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 423EAE827D804A22F202EEA1245BECB0 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 654B48F7164FAB09E419C5ACD8589C88 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EAE0E15B0B3539E3DF8D5A6050793CE3 /* UniLayout.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 05A74FF8BF5D9DFAE0F9D575D9D64345 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -409,22 +517,30 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A95754CD89B7116548AF874DE35D7BAA /* Sources */ = { + 43AAD169BBE920FA3DCD23B9FA001F5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 53270E69B3372B32ECE3B09BD6CEF378 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F5C0F08DB7200AFDC2466ED6B2D66FAC /* UniButtonView.swift in Sources */, - 13ED7FABF6ECD24CE7A09F0342A434EC /* UniFrameContainer.swift in Sources */, - C1A8F8A6E87B594B788B093852C6F635 /* UniHorizontalScrollContainer.swift in Sources */, - E5AA78C07320296327137CD0C25CF46C /* UniImageView.swift in Sources */, - 940F3054290B48D80EA0E290214EB548 /* UniLayout-dummy.m in Sources */, - 57927B58DCE9F27337CBAFA9E08C65DF /* UniLayoutProperties.swift in Sources */, - 9A38F25A44336E3A8FDDEAE9DBE21B04 /* UniLinearContainer.swift in Sources */, - 734D8773ECE8509817D78F905B42818A /* UniReusableView.swift in Sources */, - 793874313C2344C16CC3E2D4E5F13106 /* UniReusingContainer.swift in Sources */, - E8F892658A0A26CD987EEAB8F6DF5E87 /* UniTextView.swift in Sources */, - 4F9D5DDCD912F0B616FF4D54D4C0C2EA /* UniVerticalScrollContainer.swift in Sources */, - 39F459CAD45FD04FC5476A5BEAC3BDF0 /* UniView.swift in Sources */, + F2DF2F4A7BCB8D1EC2937FE6B8F6D36A /* UniAssets.swift in Sources */, + 158909C67BBC6E6B2E0C699D668E0ADD /* UniButtonView.swift in Sources */, + 07D6396037542C58D121D205D71D64B2 /* UniFrameContainer.swift in Sources */, + 2704539DB30826A2676A48429B428634 /* UniHorizontalScrollContainer.swift in Sources */, + 344A3B3D413888C9BDC58607327A2B25 /* UniImageView.swift in Sources */, + BB3119E7F1037A7615BA9ED877DDFF14 /* UniLayout-dummy.m in Sources */, + CF078F39E1134A3EC3E3D7D98A934CE5 /* UniLayoutProperties.swift in Sources */, + 5468B1A73F9B5634F12CD4F4AB2BFE84 /* UniLinearContainer.swift in Sources */, + 68E37E748915CA87E55B31951BB47096 /* UniReusableView.swift in Sources */, + BA673071B7F700DE2FA56B226AABC9CE /* UniReusingContainer.swift in Sources */, + 1FE1E4BA87C0509B371ED8D76FABE6C5 /* UniTextView.swift in Sources */, + BD31B3F28096BF59AC932876B6B9F612 /* UniVerticalScrollContainer.swift in Sources */, + 5CE521D753C5F0BF3AA17F7BD906E641 /* UniView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -445,6 +561,12 @@ target = 2961402EFE9B1E6BABAC8EFD4F6731C4 /* UniLayout */; targetProxy = 9BC6732E0A24915180D1118B2704A5A0 /* PBXContainerItemProxy */; }; + F4463B3541931669BA47CFA8B989168E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "UniLayout-UniLayout"; + target = CDCC72601C49915136167A7F35C35A2A /* UniLayout-UniLayout */; + targetProxy = 376112ED5E5B9C730B0DF68D5AD32697 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -485,7 +607,7 @@ }; 48BCC1065C5E82633DDDD341E91C046F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B30CCEED8964CC990997969E84B195E /* UniLayout.xcconfig */; + baseConfigurationReference = 1365CD6B35D1860278EBF18B84A0A7A7 /* UniLayout.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -516,6 +638,23 @@ }; name = Debug; }; + 8CC974E6C0F1E25727F811C3CA134173 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1365CD6B35D1860278EBF18B84A0A7A7 /* UniLayout.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/UniLayout"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/UniLayout/ResourceBundle-UniLayout-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = UniLayout; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 8DED8AD26D381A6ACFF202E5217EC498 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -558,7 +697,7 @@ }; 9A244AFF051047FCD17FE42A6724EDF1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B30CCEED8964CC990997969E84B195E /* UniLayout.xcconfig */; + baseConfigurationReference = 1365CD6B35D1860278EBF18B84A0A7A7 /* UniLayout.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -703,6 +842,23 @@ }; name = Release; }; + B90FB8AA92F5EF2F1984FBA439E5A751 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1365CD6B35D1860278EBF18B84A0A7A7 /* UniLayout.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/UniLayout"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/UniLayout/ResourceBundle-UniLayout-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = UniLayout; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; FC0175B3242CD39FAD323245FC59EA33 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 3C8CC03DCFB3E794116C5B30BD2044DB /* Pods-UniLayout_Tests.debug.xcconfig */; @@ -777,6 +933,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + F48B8765363D67CFE32FAC71E5E44E46 /* Build configuration list for PBXNativeTarget "UniLayout-UniLayout" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B90FB8AA92F5EF2F1984FBA439E5A751 /* Debug */, + 8CC974E6C0F1E25727F811C3CA134173 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; diff --git a/UniLayoutIOS/Example/Pods/Target Support Files/UniLayout/Info.plist b/UniLayoutIOS/Example/Pods/Target Support Files/UniLayout/Info.plist index 161a9d3..97eeeda 100644 --- a/UniLayoutIOS/Example/Pods/Target Support Files/UniLayout/Info.plist +++ b/UniLayoutIOS/Example/Pods/Target Support Files/UniLayout/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.1.0 + 0.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/UniLayoutIOS/Example/Pods/Target Support Files/UniLayout/ResourceBundle-UniLayout-Info.plist b/UniLayoutIOS/Example/Pods/Target Support Files/UniLayout/ResourceBundle-UniLayout-Info.plist new file mode 100644 index 0000000..53dfc9f --- /dev/null +++ b/UniLayoutIOS/Example/Pods/Target Support Files/UniLayout/ResourceBundle-UniLayout-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.1 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/UniLayoutIOS/Example/UniLayout/ReusingContainer/Views/ReusingContainerView.swift b/UniLayoutIOS/Example/UniLayout/ReusingContainer/Views/ReusingContainerView.swift index bb4171f..344a964 100644 --- a/UniLayoutIOS/Example/UniLayout/ReusingContainer/Views/ReusingContainerView.swift +++ b/UniLayoutIOS/Example/UniLayout/ReusingContainer/Views/ReusingContainerView.swift @@ -109,6 +109,7 @@ class ReusingContainerView: UniFrameContainer, UITableViewDataSource, UITableVie let item = items[(indexPath as NSIndexPath).row] let nextType = (indexPath as NSIndexPath).row + 1 < items.count ? items[(indexPath as NSIndexPath).row + 1].type : ReusableItemType.unknown let cell = tableView.dequeueReusableCell(withIdentifier: item.type.rawValue) as? UniReusableView ?? UniReusableView() + cell.isSimulatingSpacing = false // Set up an item cell if item.type == .item { @@ -120,7 +121,7 @@ class ReusingContainerView: UniFrameContainer, UITableViewDataSource, UITableVie // Supply data cell.selectionStyle = .none - cell.dividerIsHidden = nextType != .item + cell.dividerLine.isHidden = nextType != .item cell.contentView.backgroundColor = UIColor.white cellView?.title = item.title cellView?.additional = item.additional @@ -137,7 +138,7 @@ class ReusingContainerView: UniFrameContainer, UITableViewDataSource, UITableVie // Supply data cell.selectionStyle = .none - cell.dividerIsHidden = true + cell.dividerLine.isHidden = true cell.contentView.backgroundColor = tableView.backgroundColor cellView?.text = item.title } @@ -151,7 +152,7 @@ class ReusingContainerView: UniFrameContainer, UITableViewDataSource, UITableVie // Supply data cell.selectionStyle = .none - cell.dividerIsHidden = true + cell.dividerLine.isHidden = true cell.contentView.backgroundColor = tableView.backgroundColor } diff --git a/UniLayoutIOS/UniLayout/Assets/Images.xcassets/unilayout-chevron.imageset/Contents.json b/UniLayoutIOS/UniLayout/Assets/Images.xcassets/unilayout-chevron.imageset/Contents.json new file mode 100644 index 0000000..34a5add --- /dev/null +++ b/UniLayoutIOS/UniLayout/Assets/Images.xcassets/unilayout-chevron.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "unilayout-chevron.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/UniLayoutIOS/UniLayout/Assets/Images.xcassets/unilayout-chevron.imageset/unilayout-chevron.pdf b/UniLayoutIOS/UniLayout/Assets/Images.xcassets/unilayout-chevron.imageset/unilayout-chevron.pdf new file mode 100644 index 0000000..082b067 Binary files /dev/null and b/UniLayoutIOS/UniLayout/Assets/Images.xcassets/unilayout-chevron.imageset/unilayout-chevron.pdf differ diff --git a/UniLayoutIOS/UniLayout/Classes/helpers/UniLayoutProperties.swift b/UniLayoutIOS/UniLayout/Classes/helpers/UniLayoutProperties.swift index abace64..5df22ac 100644 --- a/UniLayoutIOS/UniLayout/Classes/helpers/UniLayoutProperties.swift +++ b/UniLayoutIOS/UniLayout/Classes/helpers/UniLayoutProperties.swift @@ -64,4 +64,13 @@ public class UniLayoutProperties { public var weight: CGFloat = 0 public var hiddenTakesSpace = false + + // --- + // MARK: Public initializer + // --- + + public init() { + // Required to be able to create UniLayoutView implementations outside of the library + } + } diff --git a/UniLayoutIOS/UniLayout/Classes/utility/UniAssets.swift b/UniLayoutIOS/UniLayout/Classes/utility/UniAssets.swift new file mode 100644 index 0000000..dd036e1 --- /dev/null +++ b/UniLayoutIOS/UniLayout/Classes/utility/UniAssets.swift @@ -0,0 +1,55 @@ +// +// UniAssets.swift +// UniLayout Pod +// +// Library utility: obtaining assets +// Obtain assets from the library, mostly used to simulate internal iOS assets +// + +import UIKit + +public class UniAssets { + + // --- + // MARK: Members + // --- + + private static var loadedAssets: [String: UIImage] = [:] + + + // --- + // MARK: Initialization + // --- + + private init() { + } + + + // --- + // MARK: Direct asset access + // --- + + public static var chevron: UIImage? { + get { return UniAssets.obtainAsset(name: "chevron") } + } + + + // --- + // MARK: Generic asset loading + // --- + + public static func obtainAsset(name: String) -> UIImage? { + if let loadedAsset = loadedAssets[name] { + return loadedAsset + } + if let bundleUrl = Bundle(for: UniAssets.self).url(forResource: "UniLayout", withExtension: "bundle") { + let bundle = Bundle(url: bundleUrl) + if let image = UIImage(named: "unilayout-" + name, in: bundle, compatibleWith: nil) { + loadedAssets[name] = image + return image + } + } + return nil + } + +} diff --git a/UniLayoutIOS/UniLayout/Classes/views/UniReusableView.swift b/UniLayoutIOS/UniLayout/Classes/views/UniReusableView.swift index f85041f..7d2899b 100644 --- a/UniLayoutIOS/UniLayout/Classes/views/UniReusableView.swift +++ b/UniLayoutIOS/UniLayout/Classes/views/UniReusableView.swift @@ -14,12 +14,19 @@ open class UniReusableView : UITableViewCell { // MARK: Members // -- - private var dividerLine = UniView() + let mainContainer = UniLinearContainer() + let contentContainer = UniFrameContainer() + let accessoryContainer = UniFrameContainer() + public let dividerLine = UniView() + private let coreContainer = UniLinearContainer() private var _view: UIView? = nil + private var _accessoryView: UIView? = nil + private var _simulatedAccessoryType = UITableViewCellAccessoryType.none + private var _simulatingSpacing = true // -- - // MARK: Setting values + // MARK: Set custom view // -- public var view: UniLayoutView? { @@ -27,20 +34,66 @@ open class UniReusableView : UITableViewCell { _view?.removeFromSuperview() _view = newValue as? UIView if _view != nil { - contentView.addSubview(_view!) + view?.layoutProperties.width = UniLayoutProperties.stretchToParent + contentContainer.addSubview(_view!) } } get { return _view as? UniLayoutView } } - public var dividerIsHidden: Bool? { + + // -- + // MARK: Remove simulation of padding and height + // -- + + open var isSimulatingSpacing: Bool { + set { + _simulatingSpacing = newValue + if _simulatingSpacing { + mainContainer.padding = UIEdgeInsetsMake(4, 8, 4, 8) + mainContainer.layoutProperties.minHeight = 44 + } else { + mainContainer.padding = UIEdgeInsetsMake(0, 0, 0, 0) + mainContainer.layoutProperties.minHeight = 0 + } + } + get { return _simulatingSpacing } + } + + + // -- + // MARK: Set custom accessory view + // -- + + open override var accessoryView: UIView? { set { - dividerLine.isHidden = newValue ?? false + _accessoryView?.removeFromSuperview() + _accessoryView = newValue + if _accessoryView != nil { + accessoryContainer.addSubview(_accessoryView!) + } + accessoryContainer.isHidden = _accessoryView == nil } - get { return dividerLine.isHidden } + get { return _accessoryView } } + + // -- + // MARK: Override and simulate disclosure indicator + // -- + open override var accessoryType: UITableViewCellAccessoryType { + set { + _simulatedAccessoryType = newValue + if _simulatedAccessoryType == .disclosureIndicator { + let imageView = UniImageView() + imageView.image = UniAssets.chevron + accessoryView = imageView + } + } + get { return _simulatedAccessoryType } + } + // -- // MARK: Initialize // -- @@ -56,19 +109,38 @@ open class UniReusableView : UITableViewCell { } func setupView() { - // Add a default empty view which will be overwritten later - let emptyView = UniView() - emptyView.layoutProperties.width = UniLayoutProperties.stretchToParent - emptyView.layoutProperties.height = 40 - view = emptyView + // Set up core container + coreContainer.orientation = .vertical + contentView.addSubview(coreContainer) + + // Set up and add the main container view + mainContainer.layoutProperties.width = UniLayoutProperties.stretchToParent + mainContainer.orientation = .horizontal + mainContainer.padding = UIEdgeInsetsMake(4, 8, 4, 8) + mainContainer.layoutProperties.minHeight = 44 + coreContainer.addSubview(mainContainer) - // Add the divider line to the container - dividerLine = UniView() + // Set up and add the divider line view dividerLine.layoutProperties.width = UniLayoutProperties.stretchToParent dividerLine.layoutProperties.height = 1 / UIScreen.main.scale dividerLine.layoutProperties.margin.left = 16 dividerLine.backgroundColor = UIColor(white: 0.8, alpha: 1) - addSubview(dividerLine) + coreContainer.addSubview(dividerLine) + + // Set up and add the content container view + contentContainer.layoutProperties.width = 0 + contentContainer.layoutProperties.weight = 1 + contentContainer.layoutProperties.verticalGravity = 0.5 + mainContainer.addSubview(contentContainer) + + // Set up and add the accessory container view + accessoryContainer.layoutProperties.margin.left = 6 + accessoryContainer.layoutProperties.margin.right = 8 + accessoryContainer.layoutProperties.minWidth = 12 + accessoryContainer.layoutProperties.horizontalGravity = 1 + accessoryContainer.layoutProperties.verticalGravity = 0.5 + accessoryContainer.isHidden = true + mainContainer.addSubview(accessoryContainer) } @@ -77,25 +149,14 @@ open class UniReusableView : UITableViewCell { // -- open override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize { - var result = CGSize.zero - if let uniCellView = _view as? UniLayoutView { - result = uniCellView.measuredSize(sizeSpec: targetSize, widthSpec: .exactSize, heightSpec: .unspecified) - result.height = max(result.height, uniCellView.layoutProperties.minHeight) - } - if !dividerLine.isHidden { - result.height += dividerLine.layoutProperties.height - } + var result = coreContainer.measuredSize(sizeSpec: targetSize, widthSpec: .exactSize, heightSpec: .unspecified) + result.height = max(coreContainer.layoutProperties.minHeight, min(result.height, coreContainer.layoutProperties.maxHeight)) return result } open override func layoutSubviews() { super.layoutSubviews() - if !dividerLine.isHidden { - _view?.frame = CGRect(x: 0, y: 0, width: contentView.frame.size.width, height: contentView.frame.size.height - dividerLine.layoutProperties.height) - dividerLine.frame = CGRect(x: dividerLine.layoutProperties.margin.left, y: frame.height - dividerLine.layoutProperties.height, width: frame.width * 2 - dividerLine.layoutProperties.margin.left, height: dividerLine.layoutProperties.height) - } else { - _view?.frame = CGRect(x: 0, y: 0, width: contentView.frame.size.width, height: contentView.frame.size.height) - } + coreContainer.frame = CGRect(x: 0, y: 0, width: contentView.frame.width, height: contentView.frame.height) } }