Skip to content

sakiyamaK/DeclarativeUIKit

Repository files navigation

DeclarativeUIKit

Swift Platforms Swift Package Manager Twitter Ask DeepWiki

UIKitのAutolayoutを宣言的に記述するライブラリです

Library for writing UIKit Autolayout declaratively.

self.declarative {
  UIScrollView.vertical {
    UIStackView.vertical {
      UIView()
      UIButton()
      UILabel()
    }
  }
}

Installation

Swift Package Manager

Once you have your Swift package set up, adding DeclarativeUIKit as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/sakiyamaK/DeclarativeUIKit", .upToNextMajor(from: "0.2"))
]

To install DeclarativeUIKit package via Xcode

Go to File -> Swift Packages -> Add Package Dependency... Then search for https://github.com/sakiyamaK/DeclarativeUIKit And choose the version you want

CocoaPods

⚠️ Note: CocoaPods support has been discontinued from version 5.0.0 onwards. Please use Swift Package Manager to integrate DeclarativeUIKit from version 5.0.0 and above. Please use Swift Package Manager to integrate DeclarativeUIKit from version 5.0.0 and above.

CocoaPods is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate DeclarativeUIKit into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'DeclarativeUIKit'

Documentation

Quick Start

sync method

import UIKit
import DeclarativeUIKit

final class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = .white

        self.declarative {            
            UIScrollView.vertical {
                UIStackView.vertical {

                    UIView()
                      .apply { view in
                          print("命令的に記述も可能")
                          view.tintColor = .black
                          view.isUserInteractionEnabled = true
                      }
                      .size(width: 100, height: 100)
                      .backgroundColor(.red)
                      .transform(.init(rotationAngle: 45.0 / 360 * Double.pi))
                      .cornerRadius(30, maskedCorners: [.layerMinXMinYCorner, .layerMaxXMaxYCorner])
                      .border(color: .blue, width: 10)
                      .customSpacing(40)

                    UIButton()
                        .title("button", for: .normal)
                        .titleColor(.brown, for: .normal)
                        .add(target: self, for: .touchUpInside, { _ in
                            print("タッチアクション")
                        })

                    Array(1 ... 10).compactMap { num in
                        UILabel("\(num)番目のlabel")
                            .textColor(.black)
                            .textAlignment(.center)
                    }

                    UIView.spacer()
                }
                .spacing(20)
            }
        }.floatingActionView {
            UIButton(configuration: .plain().title("Floating Action Button"))
        }            
    }
}

async method

actor User {
    var name: String
    init(name: String) {
        self.name = name
    }
}

final class ActorViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        Task {
            let user = User(name: "name")
            await self.applyView({ view in
                view.backgroundColor(.white)
            }).declarative {
                UILabel(await user.name)
                    .textAlignment(.center)
            }.floatingActionView {
                UIButton(configuration: .plain().title(await user.name))

            }
            
            after()
        }
    }
    
    func after() {
        print("after")
    }
}

Xcode Preview

Xcode Previewによりビルドすることなくレイアウトを確認することができます

Xcode Preview allows you to check the layout without building

import SwiftUI

#Preview {
  DeclarativeViewController()
}

Other Examples

About

Library for writing UIKit Autolayout declaratively.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages