Tag: snapkit

使用SnapKit编写自动布局约束

当最终使用Auto Layout开发UI时,您可以选择在Interface Builder中布置视图和/或以编程方式编写约束。 两种方法都不总是比另一种更好。 使用IB确实很方便-无需输入所有布局代码,它就可以大大减少开发时间。 但是有些人(包括我本人)经常喜欢用代码编写大多数约束,因为他们发现调整,调试和重用布局更容易。 而且,除非您有明确的流程,否则尝试与故事板文件上的开发人员团队并行工作可能会成为Git Nightmare™。 但是,如果您以编程方式进行了大量布局,也许您已经注意到NSLayoutConstraint的API可能很冗长。 是否曾经在代码中完全实现过复杂的UI? 最终它有多少LOC? 大概很多! 一般来说,代码越少越好吧? 如果有一个更简单,更快的方法来编写布局约束,那将是很好的。 SnapKit简介 从GitHub页面 SnapKit是一种DSL,可在iOS和OS X上简化自动布局。 SnapKit本质上是用于编写约束的语法糖。 它通过UIView / NSView类上公开的’snp’属性提供了很高的抽象水平,允许您使用简洁的闭包语法在视图上定义约束,然后让SnapKit负责其余的工作。 它可以使您的布局代码清晰,简洁。 真的很简洁。 只要看看将UITableView约束到其超级视图的所有四个方面是多么容易。 这是使用原始NSLayoutConstraint API的相同代码。 这是另一个示例,将视图集中在屏幕上。 我们可以利用SnapKit的一些便捷方法和链接约束的能力来略微缩短此时间。 很酷。 如您所见,SnapKit非常直观且易于使用。 查看文档以获取更多示例。 不确定SnapKit是否适合生产中的应用程序,我不确定—好像存在一些内存泄漏问题,也许不是吗? 尽管如此,SnapKit是一个很棒的库,只是因为它变得更好,所以我建议您检查一下。

SnapKitten —用于线性布局的Swift库

长期以来,我是一名Android开发人员。 我喜欢android XML布局编辑器,它很容易实现我想要的结果。 而且我可以在编辑器中轻松预览。 从android到iOS,都有一个等效的编辑器-XIB或情节提要及其布局系统-约束系统。 我个人不喜欢故事板,要在故事板上定义所有内容并不容易。 对于团队发展,有时会在编辑中产生冲突。 因此,我选择SnapKit作为我的布局创建工具。 SnapKit是最好的iOS库之一,我喜欢它的语法,但是,iOS约束系统本身仍然不容易完全理解。 我花了几周的时间研究约束系统,但其结果仍不总是我的期望。 这就是为什么我写了一个库来处理我通常会重复使用的某些情况的原因。 在snapKitten中,引用了Android的线性布局。 它完全基于SnapKit和Constraint系统。 目的是处理iOS布局设计的一些线性情况。 SnapKitten的目标 1.基于约束系统 2.解决线性布局,例如android中的LinearLayout 3.易于使用,如SnapKit 编码示例 考虑一下,我们需要一个用户配置文件布局,其中图像在左侧,用户名在右侧。 让userProfile:UIView = Kitten.horizo​​ntal()。from() .add(imageView).size(40) .add(label).itemOffset(10) 。建立() 这是怎么回事? 1.定义方向(水平/垂直) 2.在from()方法中选择userProfile的父UIView 3.小猫添加一个UIImageView和UILabel 4.在每个添加视图操作之后,您将定义线性布局的一些属性。 5. build()返回连接所有子视图的父UIView 小猫实际上是做什么的? 1.在调用build()方法之前,它什么都不做。 它没有添加任何视图,并且您的视图没有属性更改。 2.当调用build方法时,它开始在子代及其父容器之间建立约束。 3.包括位置对齐,大小,内容压缩,内容拥抱属性。 4.位置和大小与任何帧原点/大小无关。 纯约束。 更复杂的例子 考虑一下,我们需要一个视图控制器,它的用户配置文件顶部对齐,菜单的三个图标底部对齐,其余中间部分是scrollview。 让userProfile:UIView = Kitten.horizo​​ntal()。from()。defaultAlignment(.start) .add(iv).size(40) .add(lblA).itemOffset(10) 。建立() userProfile.backgroundColor = UIColor.orange 让bottomMenu = Kitten.horizo​​ntal()。from() .weightMode(true) […]

SNAPKit nedirnasılkullanabiliriz吗?

大容量iPhone型号320×480像素布局布局sadece bir cihazagöreoluşturmakyeterli oluyordu。 Sonradan iPhone 5,iPhone6,iPhone6 Plus和iPhone6 Plus型号,包括她的iPhone 5和iPhone6 Plus。 界面生成器ile AutoLayout可以在界面上显示出来。 不可抗拒的法律和约束条件。 Apple iOS SDK可以使用NSLAyoutConstraints来完成对karmaşıklığını的操作。 提示SNAPKityardımımızakoşuyor。 SNAPKit ile“ swifty ” olarakokunabilirliğidaha iyihızlıve kolay birşekilde制约因素artıkoluşturabiliriz🙂 Örneklerilenasılkullanabileceğimizibir inceleyelim。 SNAPKitkütüphanesiniCocoaPods Ent Entegre ettikten sonrabütünview’lerde snp attribute ile SNAPKitkütüphanesineulaşabiliriz。 约束条件可以使约束方法不合规,而参数不能被约束。 Öceçoğunluklakullandığımız填充işleminebirbakalım。 容器view’e 20 pts填充ile bir kutuyerleştirmekistiyorsak bunuaşağıdakişekildekolayca yapabiliriz。 .equalTo methodunda hangi view’egörekonumlandıracağımızıseçiyoruz。 equalTo methodu参数olarak视图,ViewAttribute vebit sabit birsayıdeğerialabiliyor。 […]

为什么我停止在iOS项目中使用Storyboard和Xib

故事板可帮助我们简化创建iOS应用程序的UI。 拥有一个仅需几次单击和拖动的模拟应用程序,真的很棒,对吗? 我们甚至可以忘记导航,即每个应用程序使用的功能。 仅通过从一个屏幕到另一个屏幕的链接即可完成所有导航,如果转换很复杂,有时还可以使用自定义代码。 苹果正在继续改进Xcode的Interface Builder,以添加越来越多的功能来帮助开发人员简化其UI存根。 例如,我们现在可以预览不同屏幕尺寸的渲染。 我发现此功能非常有用。 当我们由一个小型团队(或一个人)开发一个小型应用程序时,所有这些好东西仍然是好的。 一旦应用程序扩展,团队就会成长,使用情节提要和.xib可能会成为噩梦。 让我们看看为什么。 如果我们没有足够强大的MacBook(Pro),则当我们不得不打开一个大的故事板时,Xcode可能会冻结您的计算机一段时间。 即使使用简单的情节提要板,我也花了大约10秒钟的时间在Xcode中打开它。 对于必须使用旧的MacMini或旧的MacBook开发的人来说,这可能会降低他们的工作性能。 当我们创建具有多个屏幕的大型应用程序时,情节提要文件可能会非常庞大​​。 概述和遵循应用程序流程并非易事。 如果有新的开发人员加入该项目,他将很难理解屏幕之间的逻辑和转换。 当然,我们仍然可以采用一种解决方法来创建使用情节提要面板场景,以将其分隔为多个情节提要面板,并避免使用大型情节提要。 但是,从中创建View / ViewController的实例时,开发人员应该照顾故事板名称或Xib名称。 使用情节提要/ xib时最不方便的是与.storyboard或.xib文件存在某些合并冲突。 当团队的开发人员在不同的存储库分支中同时编辑同一.xib或.storyboard,然后合并到主分支中时,就会发生这种情况。 情节提要和xib文件均为XML格式。 但是这些XML不是用户友好的。 Xml节点是自动生成的,这使我们很难知道xml中带有节点的UIView的引用。 每个节点还具有很多属性(用于指定高度,宽度,位置,颜色等)。 发生合并冲突时,如果合并不正确,将导致错误的结果,有时我们会破坏xml格式,因此无法打开.xib或.storyboard文件。 基本上,我们不会通过Storyboard / xib创建ViewController和View,而是将它们全部写入* ViewController.m / .swift或* View.m / swift。 在这篇文章中,我只会以Swift来编写代码,因为我更喜欢Swift而不是Objective-C,而且我相信你们也喜欢Swift。 假设我们要创建一个包含登录名和电子邮件文本字段以及用于处理登录的按钮的登录屏幕,如下所示: 我们将必须创建两个类: LoginView.swift和LoginViewController.swift 。 LoginView.swift继承了 UIView的子类,并且包含用于构建要在所有自动布局约束条件下显示的视图的代码。 LoginViewController.swift继承了 UIViewController的子类,并包含我们需要应用于这些元素的控件处理程序。 首先,让我们看看我们在LoginViewController.swift文件中要做的事情。 它不是那么复杂,对吗? 我们要做的就是重写loadView函数,以告知LoginViewController它需要加载并使用LoginView类中的自定义视图。 然后,ViewController应该控制此View内部的功能元素,以控制用户单击登录按钮或关闭按钮时的操作 。 在ViewController类中,我们不实现任何视图布局或视图的自动布局。 所有视图布局必须在View类内部完成。 这样,ViewController将变得更轻,更清洁。 […]

操场上的UI编程

Applicationยปกติในการพัฒนา应用程序บนiOSส่วนของUIก็จะใช้เครื่องมือแสนสบายอย่างStoryboard(ถ้าเป็นก่อนหน้านี้ก็Interface Builder)กันมานานแล้วแต่ถึงแม้จะสะดวกสบายก็ยังมีข้อเสียอยู่หลายอย่างเช่น งCode故事脚本生成boardนมาทำให้合并ทำให้ยากมาก(Xcode 8ปรับปรุงแล้วนะ冲突กันอยแต่ก็าง) layรื่องของAutolayoutที่แก้ไขยากยิ่งกับ视图ที่การจัดวางซับซ้อนมากๆ动画ืนยุ่งกับ约束ุ่งกับยมันปวดหัวสุดๆในการนั่งไล่debugว่าอะไรเป็นอะไร SeายSegueIdentifier Flowิดเดีมมมมมมัgh gh Spaghettiดีๆี่เก็ี่เี่เ Story Story Storyboardใน版本หลังๆจะพัฒนาขึ้นมาได้มากซักแค่ไหนก็ดูเหมือนว่าถ้าเป็นหน้าที่布局ซับซ้อนมากๆเขียนUIด้วยโค้ดมันซะเลยมันก็ยังโอเคกว่าในระยะยาว UIาเป็นเมื่อก่อนการจินตนาการUIไว้ในหัวมันเป็นเนเรื่องยากและใช้เวลานานมากๆต้องเขียนไปbuildแต่เดี๋ยแต่เดี๋นี้มันง่ายขึ้นเยอะด้วย งทำย์ขอContentอผมจะต้องทำTableViewเป็Content Content Contentๆๆๆ์ขทั้ง์ขcell์ข์ข ถูกต้อง100%”(ไม่งั้นTableViewจะไม่คำนวนความสูงให้) Playรื่องมือที่ผมจะใช้คือ游乐场,cocoapods-游乐场และSnapKit cocoapods-playground เป็นเครื่องมือที่ช่วยที่ช่วราสร้าง游乐场项目ที่ติดตั้งpodsต่างๆไว้ด้วยได้สามารถติดตั้งและตามขั้นตอนที่https://github.com/segiddins/ThisCouldBeUsButYouPlayingส่วน SnapKit Kit น Library codeยน代码故事板แบบเต็มๆ(เพราะมันเทอะทะเหลือเกิน) ผมไปที่ริ่มต้นผมไปที่พิมพ์คำสั่ง $荚游乐场SnapKit Playากนั้น游乐场项目ที่มีCocoapodก็จะถูกสร้างขึ้นมาเปิดไฟล์SnapKit.xcworkspaceแล้วเลือก SnapKitPlayground scheme แล้ว构建ซะครั้งนึงรราก็จะ导入SnapKitเข้ามาใน操场เราได้แล้ว代码บรรทัดที่เกี่รทัดที่เกี่ยวข้องกับงกับาร导入จะเป็นแบบน งากนั้นเราก็สร้างcellขึ้นมาตามปกติ ได้อเราได้Cellตามที่ออกแบบและทดสอบสมใจก็复制โค้ดไปวางในViewของโปรเจคหลักได้เลยหรือใครจะสร้างเป็น文件ย่อยๆแล้วยกทั้งไฟล์ไปไว้เลยกทั้งไฟล์ไปไว้เลากันครับfile 权衡权衡มีข้อดีก็มีข้อมีข้ยครับวิธีนี้ผมชอบนะแต่ก็มีข้อเสียอยู่บ้างเหมือนกันดังนี้ งๆารแสดงผลบนหน้าจอขนาดต่างๆ —จะเห็นว่ามัน渲染เป็น默认大小storyยวบน故事板 ไม่支持选型课 — viewาจะทดสอบว่า视图แสดงผลอย่างไรบน特质ต่างๆของแต่ละ选型课…หมดสิทธิ์ครับ การจัดการ资源,渲染性能 —การจะใช้รูป,字体ต้อะๆาใส่เพิ่มเข้าไปอไปรวมถึงถ้ารูปใหญ่ๆimage(xcodeปิดตัวเอง)ไปเลยไปเล 安卓系统 —安卓系统开发者Layout.xml 调试侦听 — กนเป็องที่ปกติยที่ใหญ่ที่สุด ของ วิธี การนี้เลยถ้าเราลืมทำอะไรไปซักอย่างที่ปกติXcodeจะมีนจะมีfix-itให้นทำให้มันไม่渲染视图ขึ้นมาให้เราดูก็หากันไปทีละบรรทัด ยังกะเขียนเวบแน่ะตรงนี้หวังว่า游乐场版本หลังๆจะแก้ไขให้เราเนอะ งรับผมผมว่ามันสะดวกกับการทำงานแบบขึ้นโครง视图เป็นชิ้นเล็กๆก่อนนำไปประกอบรวมกันเป็น视图ใหญ่ๆอีกทีและผมชอบวิธีนี้มากกว่ากาการไปวาง布局ในStoryboardแล้วหล่ะ ส่วนคุณจะเลือกใช้ยังไงก็ลองดูตามความเหมาะสมและพึงพอใจครับ🙂 故障排除 ลิสต์ปัญหาที่อาจจะเจอได้บ่อยๆผมรวบรวมไว้ให้แก้ได้ง่ายๆ Use […]

iOS App Swift初学者,带有示例应用程序,架构简洁

Clean Swift或Clean Architecture是适用于iOS和Mac项目的体系结构。 Clean Swift体系结构不是框架。 它是一组Xcode模板,可以为您生成Clean Architecture组件。 这意味着您可以自由修改模板以适合您的需求。 因此,如果我们要更改某些内容,则它不会影响其他文件,因为它基于图层。 Swift是用于macOS,iOS,watchOS和tvOS的功能强大且直观的编程语言。 编写Swift代码是交互式且有趣的,语法简洁而又富有表现力,并且Swift包含开发人员喜欢的现代功能。 Swift代码在设计上是安全的,但也可以生成运行闪电般快的软件。 Swift已经支持所有Apple平台以及Linux,社区成员正在积极努力移植到更多平台。 传统建议使用新语言的第一个程序应在屏幕上打印“ Hello,world!”字样。 在Swift中,这可以单行完成: 打印(“你好,世界!”) Swift语法类似于C或Objective-C。 在全局范围内编写的代码用作该程序的入口点,因此您不需要main()函数。 您也不需要在每个语句的末尾写分号。 使用let来使常量或var来使变量。 常量的值不需要在编译时就知道,但是您必须为它赋值一次。 常量或变量的类型必须与要分配给它的值的类型相同。 var myVariable = 42 myVariable = 50 让myConstant = 42 使用SnapKit的Swift SnapKit具有清晰简洁的API,可轻松编写代码中的约束。 所以 安装 我们将使用CocoaPods安装SnapKit。 CocoaPods是Swift和Objective-C Cocoa项目的依赖项管理器。 它拥有超过51,000个库,并在超过300万个应用程序中使用。 CocoaPods可以帮助您优雅地扩展项目。 #Xcode 8 + 9 $ sudo gem install cocoapods 然后在Xcode项目目录中,打开位于项目目录位置的终端并输入: 荚初始化 然后在项目目录中,您将看到一个需要添加的podfile: 吊舱“ […]

Swift-SnapKit ve Auto Layout nedir,还可以吗? 📏

Merhabaarkadaşlar,BugünküyazımdadahaçokSnapKit, Auto Layout nedir? nasılkullanılır? 🤔 Auto Layout’un SnapKit和Bunun gibikütüphanelerlene kadar kolay veyönetilebilirolduğunugöstereceğim。 自动版面奈迪尔? 自动布局,iOS或OS X,请查看nesnesindentüretilmiştümobjelerin otomatik图片 Auto LayoutiçinApple’ındesteğiy mu吗? ElbettedesteğivaryalnızSnapKit gibi birkütüphaneile hem hem dahakısakod kullanarak,hemde Auto Layout手工制作布局。 Apple’ındökümantasyonlarındakendi自动布局API’ınadairdetaylarıgörebilirsinizzatenbaktığınızdaSnapKit gibi birkütüphaneninkesinlikle bir velinimetolduğunufarkedersiniz。 Apple AutoLayoutdökümantasyonu:自动布局指南-以编程方式 Aynızamanda Auto Layout故事情节提要kullanarakuygulamanızıgeliştiriyorsanız接口生成器üzerindende yapabilirsiniz。 本以编程方式 olarak UI nesnelerinioluşturduğunuzuvarsayarak SnapKit’ianlatacağım。 自动布局 大小(宽度,高度), 点(X,Y),以及尺寸。 Korkmayın,Matematikanlatmayacağım。 😃Demem o ki X’in yataydüzlemde,Y’in dikeydüzlemdeolduğunubiliyorsanız,güvendesiniz。 […]

妈妈,没有情节提要!

作为一名自学成才的iOS开发人员,他通过观看Youtube教程和使用故事板的在线课程来学习大多数技能,这已成为第二自然。 一段时间以来,我什至都不知道在Xcode中使用情节提要还有其他选择。 我错了! 在学习Swift的过程中,我开始看到许多项目在其项目中使用了程序约束。 因此,我开始研究为什么人们甚至想使用自动布局DSL。 我的意思是情节提要能够正常工作,但我没有看到任何瑕疵(这就是我的想法)。 基本上,这就是我为什么会放弃情节提要的原因。 协作-故事板无法与源代码控制一起很好地工作。 想要与朋友一起工作时,故事板不是您的朋友。 情节提要很慢-请从开始使用2011 Macbook Air开发的人员那里获取。 我已经习惯了看到彩虹旋转。 🍭 代码大师竞赛—代码将永远是卓越的。 编写,读取和调试更加容易。 这就是我们将要建立的。 它是iPhone X Apple最新和最出色的锁定屏幕的模型。 没有情节提要,也没有笔尖与代码。 那里有许多自动布局的DSL库。 在本教程中,我将使用SnapKit,您可以找到自己喜欢或感觉更自然的风格。 删除Main.storyboard文件。 是的,删除! 在执行此操作时,最好也删除ViewController.swift 。 ( 不要删除launchscreen.storyboard ) 在您的项目中为我们项目中的某些组织创建以下组结构。 将AppDelegate.swift , LaunchScreen.storyboard和Info.plist移到“ 应用程序”组中。 在Controller组内部,创建一个新的viewController类,并将其命名为“ LockScreenVC ”。 在“ 助手”组中创建一个快捷文件,并将其命名为“ 主题 ”。 您现在应该具有以下结构。 我们将使用Pod安装SnapKit。 将以下pod添加到您的podfile中。 pod’SnapKit’,:git =>’https://github.com/SnapKit/SnapKit.git’,:branch =>’swift-4′ pod’SwiftIcons’,’〜> 1.5.1′ 我们将使用SnapKit的Swift 4分支。 Swift Icons是可选的,您不必包含它。 我只是将其用作图标。 […]

Swift:如何使用snapkit获得正确的UICollectionView高度?

我可能会以完全错误的方式去解决这个问题,因为我尝试做的应该很简单…我有一个包含几个子视图的视图组件,其中一个是UICollectionView。 我使用SnapKit布局子视图。 UICollectionView是button的stream程布局,跨越0到n行,button的数量从一开始就是已知的。 当我通过SnapKitconfiguration约束时,Collection的高度为0,因为没有任何项目(cellForItemAt仍然没有调用)。 我将如何去获得在SnapKit中dynamic设置集合的高度? 还是有更好的方式来获得我正在寻找的基本stream程布局(dynamicheigth-adjustement)? (注:代码有点简单,只显示相关部分) class CategoryList: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate { var categories : [String]? var buttons = [BorderedButton]() private(set) lazy var collectionView: UICollectionView = { var flowLayout = UICollectionViewFlowLayout() let collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: flowLayout) collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "collectionCell") collectionView.delegate = self collectionView.dataSource = self collectionView.backgroundColor = UIColor.cyan return collectionView }() […]