Swift的一個(gè)簡(jiǎn)單布局Demo

Xcode快捷鍵:

格式化代碼:

control + i (Editor-Structure-Re indent)

移動(dòng)代碼:

alt+command+[ (Editor-Structure-Move Line Up)
alt+command+] (Editor-Structure-Move Line Down)

從當(dāng)前位置刪除到分隔符:

例如: 如下代碼, 我們想把dataArray改為resultArray:
let group = dataArray[section]
通常做法是將鼠標(biāo)放到data后面, 然后按delete多次刪除data, 其實(shí)刪除的這一步可以按住alt+delete; 這樣就會(huì)刪除當(dāng)前鼠標(biāo)指針到前面分隔符之間的字符.

向后刪除:

fn + delete; 只是Mac系統(tǒng)的功能, 也就是說(shuō), 所有的編輯界面都可以用, 不僅限于Xcode

創(chuàng)建橋接文件:

因?yàn)槟壳癚MUI還沒(méi)有Swift版本, 是OC版本, 而我們是Swift項(xiàng)目, 所有需要?jiǎng)?chuàng)建橋接文件, 方法是在項(xiàng)目里面創(chuàng)建一個(gè)OC文件, 會(huì)自動(dòng)彈出提示詢問(wèn)是否添加橋接文件, 選擇是就行了

#import <QMUIKit/QMUIKit.h>

使用:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = UIColor.systemPink
        
        view.addSubview(showMoreButtonView)
    }
    
    @objc func onPrimaryClick(){
        print("點(diǎn)擊了按鈕")
    }
    
    //懶加載
    lazy var showMoreButtonView: QMUIButton = {
        let result = QMUIButton(frame: CGRect(x: 50, y: 100, width: 200, height: 45))
        result.adjustsButtonWhenHighlighted = true//自動(dòng)調(diào)整高亮效果
        result.titleLabel?.font = UIFont.systemFont(ofSize: 15)
        result.setTitleColor(.white, for: .normal)
        result.backgroundColor = UIColor.blue
        result.layer.cornerRadius = 5
        result.setTitle("從底部顯示更多彈窗按鈕", for: .normal)
        result.addTarget(self, action: #selector(onPrimaryClick), for: .touchUpInside)
        return result
    }()
}

SnapKit -- 登錄注冊(cè)頁(yè)

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.title = "登錄"
        
        //輸入框
        view.addSubview(accountView)
        view.addSubview(passwordView)
        view.addSubview(primaryButtonView)
        view.addSubview(registerButtonView)
        
        accountView.snp.makeConstraints { make in
            make.left.equalToSuperview().offset(16) //距離父視圖左邊距離
            make.right.equalToSuperview().offset(-16)//距離父視圖右邊距離
            if #available(iOS 11.0, *) {
                //距離安全區(qū)域的距離
                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(16)
            } else {
                // Fallback on earlier versions
            }
            make.height.equalTo(50)
        }
        
        passwordView.snp.makeConstraints { make in
            make.left.equalToSuperview().offset(16) //距離父視圖左邊距離
            make.right.equalToSuperview().offset(-16)//距離父視圖右邊距離
            make.top.equalTo(accountView.snp.bottom).offset(16)
            make.height.equalTo(50)
        }
        
        primaryButtonView.snp.makeConstraints { make in
            make.left.equalToSuperview().offset(16) //距離父視圖左邊距離
            make.right.equalToSuperview().offset(-16)//距離父視圖右邊距離
            make.top.equalTo(passwordView.snp.bottom).offset(16)
            make.height.equalTo(50)
        }
        
        registerButtonView.snp.makeConstraints { make in
            make.centerX.equalToSuperview() //水平居中
            make.top.equalTo(primaryButtonView.snp.bottom).offset(16)
        }
    }
    
    //懶加載
    lazy var accountView: QMUITextField = {
        let result = QMUITextField()
        result.textInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0)
        result.backgroundColor = .lightGray
        result.layer.cornerRadius = 5
        result.placeholder = "請(qǐng)輸入用戶名"
        return result
    }()
    
    lazy var passwordView: QMUITextField = {
        let result = QMUITextField()
        result.textInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0)
        result.backgroundColor = .lightGray
        result.layer.cornerRadius = 5
        result.placeholder = "請(qǐng)輸入密碼"
        result.isSecureTextEntry = true
        return result
    }()
    
    lazy var primaryButtonView: QMUIButton = {
        let view = QMUIButton()
        view.adjustsButtonWhenHighlighted = true
        view.titleLabel?.font = UIFont.systemFont(ofSize: 16)
        view.setTitleColor(.white, for: .normal)
        view.backgroundColor = .blue
        view.layer.cornerRadius = 5
        view.setTitle("登錄", for: .normal)
        view.addTarget(self, action: #selector(onPrimaryClick), for: .touchUpInside)
        return view
    }()
    
    lazy var registerButtonView: QMUIButton = {
        let view = QMUIButton()
        view.adjustsButtonWhenHighlighted = true
        view.titleLabel?.font = UIFont.systemFont(ofSize: 16)
        view.setTitleColor(.gray, for: .normal)
        view.setTitle("去注冊(cè)", for: .normal)
        view.sizeToFit() //寬高根據(jù)文字大小自適應(yīng)
        view.addTarget(self, action: #selector(onRegisterClick), for: .touchUpInside)
        return view
    }()
    
    @objc func onPrimaryClick(){
        print("登錄")
        navigationController?.pushViewController(SettingController(), animated: true)
    }
    @objc func onRegisterClick(){
        print("去注冊(cè)")
    }
}

SnapKit -- 設(shè)置頁(yè)

SettingView.swift中, 封裝組件:

/// 設(shè)置itemVIew
class SettingView: UIView {

    //重寫構(gòu)造方法
    init(){
        super.init(frame: CGRect.zero)
        
        innerInit()//定義公共的init方法
    }

    //重寫可視化的init方法
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        
        innerInit()//定義公共的init方法
    }
    
    func innerInit() {
        backgroundColor = .white
        addSubview(iconView)
        addSubview(titleView)
        addSubview(moreIconView)
    }
    
    /// 當(dāng)視圖加入父視圖時(shí) / 當(dāng)視圖從父視圖移除時(shí)調(diào)用
    override func didMoveToSuperview() {
        super.didMoveToSuperview()
        
        //添加約束
        iconView.snp.makeConstraints { make in
            make.left.equalToSuperview().offset(16)
            make.centerY.equalToSuperview()
            make.width.equalTo(20)
            make.height.equalTo(20)
        }
        
        titleView.snp.makeConstraints { make in
            make.left.equalTo(iconView.snp.right).offset(16)
            make.centerY.equalToSuperview()
            //不用設(shè)置寬高, 根據(jù)內(nèi)容自動(dòng)寬高
        }
        
        moreIconView.snp.makeConstraints { make in
            make.right.equalToSuperview().offset(-16)
            make.centerY.equalToSuperview()
            make.width.equalTo(20)
            make.height.equalTo(20)
        }
    }
    
    /// 左側(cè)圖標(biāo)
    lazy var iconView: UIImageView = {
        let result = UIImageView()
        result.image = UIImage(named: "Setting")
        return result
    }()
    
    /// 標(biāo)題
    lazy var titleView: UILabel = {
        let result = UILabel()
        result.text = "設(shè)置"
        result.textColor = .black
        return result
    }()
    
    /// 右側(cè)圖標(biāo)
    lazy var moreIconView: UIImageView = {
        let result = UIImageView()
        result.image = UIImage(named: "Arrow")
        return result
    }()
}

SettingController.swift中, 使用組件:

class SettingController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.title = "設(shè)置"
        self.view.backgroundColor = .systemGray
        
        //-------設(shè)置item
        self.view.addSubview(settingView)
        self.view.addSubview(collectionView)
       
        //-----設(shè)置約束
        settingView.snp.makeConstraints { make in
            make.left.equalToSuperview()
            make.right.equalToSuperview()
            if #available(iOS 11.0, *) {
                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(16)
            } else {
                // Fallback on earlier versions
            }
            make.height.equalTo(55)
        }
        
        collectionView.snp.makeConstraints { make in
            make.left.equalToSuperview()
            make.right.equalToSuperview()
            make.top.equalTo(self.settingView.snp.bottom).offset(0.5)
            make.height.equalTo(55)
        }
        
    }
    
    
    
    /// 設(shè)置Item
    lazy var settingView: SettingView = {
        let result = SettingView()
        result.titleView.text = "設(shè)置"
        //設(shè)置點(diǎn)擊事件
        result.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onSettingClick(recognizer:))))
        
        return result
    }()
    
    /// 收藏Item
    lazy var collectionView: SettingView = {
        let result = SettingView()
        result.titleView.text = "收藏"
        
        return result
    }()
    
    @objc func onSettingClick(recognizer:UITapGestureRecognizer) {
        print("點(diǎn)擊了設(shè)置界面的一個(gè)item")
    }
}

iOS-屏幕適配(SnapKit) https://juejin.cn/post/6979390190192164878

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子暇番,更是在濱河造成了極大的恐慌座慰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒸甜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)暮现,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)楚昭,“玉大人栖袋,你說(shuō)我怎么就攤上這事「” “怎么了塘幅?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尿贫。 經(jīng)常有香客問(wèn)我晌块,道長(zhǎng),這世上最難降的妖魔是什么帅霜? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任匆背,我火速辦了婚禮,結(jié)果婚禮上身冀,老公的妹妹穿的比我還像新娘钝尸。我一直安慰自己,他們只是感情好搂根,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布珍促。 她就那樣靜靜地躺著,像睡著了一般剩愧。 火紅的嫁衣襯著肌膚如雪猪叙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天仁卷,我揣著相機(jī)與錄音穴翩,去河邊找鬼。 笑死锦积,一個(gè)胖子當(dāng)著我的面吹牛芒帕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丰介,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼背蟆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鉴分!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起带膀,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤志珍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后垛叨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伦糯,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年点额,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舔株。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡还棱,死狀恐怖载慈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情珍手,我是刑警寧澤办铡,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站琳要,受9級(jí)特大地震影響寡具,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稚补,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一童叠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧课幕,春花似錦厦坛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至润绎,卻和暖如春撬碟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莉撇。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工呢蛤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稼钩。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓顾稀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坝撑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子静秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容