[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6937":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":14,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":20,"defaultBranch":21,"hasWiki":19,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},6937,"panelkit","louisdh\u002Fpanelkit","louisdh","A UI framework that enables panels on iOS.","",null,"Swift",3748,154,1,7,0,58.67,"MIT License",true,false,"master",[23,24,25,26,27,28,29,30],"ios","ipad","panels","pro","swift","ui","uikit","ux","2026-06-12 04:00:31","\u003Cp align=\"center\">\n\u003Cimg src=\"readme-resources\u002Fhero.png\" style=\"max-height: 300px;\" alt=\"PanelKit for iOS\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Ftravis-ci.org\u002Flouisdh\u002Fpanelkit\">\u003Cimg src=\"https:\u002F\u002Ftravis-ci.org\u002Flouisdh\u002Fpanelkit.svg?branch=master\" style=\"max-height: 300px;\" alt=\"Build Status\"\u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Flouisdh\u002Fpanelkit\">\u003Cimg src=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Flouisdh\u002Fpanelkit\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg\" alt=\"Codecov\"\u002F>\u003C\u002Fa>\n\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fswift\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwift-4.1-orange.svg?style=flat\" style=\"max-height: 300px;\" alt=\"Swift\"\u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002Fpods\u002FPanelKit\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FPanelKit.svg\" style=\"max-height: 300px;\" alt=\"PodVersion\"\u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCarthage-compatible-4bc51d.svg?style=flat\" style=\"max-height: 300px;\" alt=\"Carthage Compatible\"\u002F>\u003C\u002Fa>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-iOS-lightgrey.svg\" style=\"max-height: 300px;\" alt=\"Platform: iOS\">\n\u003Cbr>\n\u003Ca href=\"http:\u002F\u002Ftwitter.com\u002FLouisDhauwe\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTwitter-@LouisDhauwe-blue.svg?style=flat\" style=\"max-height: 300px;\" alt=\"Twitter\"\u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpaypal.me\u002Flouisdhauwe\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDonate-PayPal-green.svg?style=flat\" alt=\"Donate via PayPal\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Cimg src=\"readme-resources\u002Fexample.gif\" style=\"max-height: 4480px;\" alt=\"PanelKit for iOS\">\n\u003Cbr>\n\u003Ci>Applications using PanelKit can be seen in the \u003Ca href=\"SHOWCASE.md\">showcase\u003C\u002Fa>.\u003C\u002Fi>\n\u003C\u002Fp>\n\n\n## About\nPanelKit is a UI framework that enables panels on iOS. A panel can be presented in the following ways:\n\n* Modally\n* As a popover\n* Floating (drag the panel around)\n* Pinned (either left or right)\n\n\nThis framework does all the heavy lifting for dragging panels, pinning them and even moving\u002Fresizing them when a keyboard is shown\u002Fdismissed.\n\n\n## Implementing\nA lot of effort has gone into making the API simple for a basic implementation, yet very customizable if needed. Since PanelKit is protocol based, you don't need to subclass anything in order to use it. There a two basic principles PanelKit entails: ```panels``` and a ```PanelManager```.\n\n### Panels\nA panel is created using the ```PanelViewController``` initializer, which expects a ```UIViewController```, ```PanelContentDelegate``` and ```PanelManager```.\n\n#### PanelContentDelegate\n```PanelContentDelegate ``` is a protocol that defines the appearance of a panel. Typically the ```PanelContentDelegate ``` protocol is implemented for each panel on its ```UIViewController```.\n\n\nExample:\n\n```swift\nclass MyPanelContentViewController: UIViewController, PanelContentDelegate {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        self.title = \"Panel title\"\t\n    }\n    \n    var preferredPanelContentSize: CGSize {\n        return CGSize(width: 320, height: 500)\n    }\t\n}\n```  \n\nA panel is explicitly (without your action) shown in a ```UINavigationController```, but the top bar can be hidden or styled as with any ```UINavigationController```.\n\n\n### PanelManager\n```PanelManager``` is a protocol that in its most basic form expects the following:\n\n```swift\n\u002F\u002F The view in which the panels may be dragged around\nvar panelContentWrapperView: UIView {\n    return contentWrapperView\n}\n\n\u002F\u002F The content view, which will be moved\u002Fresized when panels pin\nvar panelContentView: UIView {\n    return contentView\n}\n\n\u002F\u002F An array of PanelViewController objects\nvar panels: [PanelViewController] {\n    return []\n}\n``` \n\nTypically the ```PanelManager``` protocol is implemented on a ```UIViewController```.\n\n## Advanced features\nPanelKit has some advanced opt-in features:\n\n* [Multi-pinning](docs\u002FMultiPinning.md)\n* [Panel resizing](docs\u002FResizing.md)\n* [State restoration](docs\u002FStates.md)\n* [Exposé](docs\u002FExpose.md)\n\n## Installation\n\n### [CocoaPods](http:\u002F\u002Fcocoapods.org)\n\nTo install, add the following line to your ```Podfile```:\n\n```ruby\npod 'PanelKit', '~> 2.0'\n```\n\n### [Carthage](https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage)\nTo install, add the following line to your ```Cartfile```:\n\n```ruby\ngithub \"louisdh\u002Fpanelkit\" ~> 2.0\n```\nRun ```carthage update``` to build the framework and drag the built ```PanelKit.framework``` into your Xcode project.\n\n\n\n## Requirements\n\n* iOS 10.0+\n* Xcode 9.0+\n\n## Todo \n\n### Long term:\n- [ ] Top\u002Fdown pinning\n\n## License\n\nThis project is available under the MIT license. See the LICENSE file for more info.\n","PanelKit 是一个用于在iOS上实现面板功能的UI框架。它支持多种面板展示方式，包括模态、弹出框、浮动（可拖动）和固定（左侧或右侧），并且能够自动处理面板的拖拽、固定以及键盘显示\u002F隐藏时的移动和大小调整等复杂操作，极大地简化了开发流程。该框架基于Swift编写，采用了协议驱动的设计模式，使得开发者无需继承特定类即可轻松集成，并且提供了高度自定义的可能性。PanelKit特别适合需要丰富交互体验的应用场景，如iPad上的多任务处理应用或是任何希望增强用户界面灵活性和互动性的iOS应用程序中。",2,"2026-06-11 03:09:37","top_language"]