Day#13 登入画面(2)

前言

昨天成功的放上imageView以及标题,今天来把其他的栏位放上~

登入栏位

LoginViewController

private let scrollView: UIScrollView = {
    let scrollView = UIScrollView()
    scrollView.clipsToBounds = true
    return scrollView
}()

在iOS中,滚动视图(scroll view)是用来浏览无法在整个画面容下的其他内容。滚动视图有两个主要用途:

  • 提供使用者拖曳至他们想要呈现的内容区域
  • 提供使用者使用手指缩放手势来对所呈现的内容放大或缩小

也就是说,透过scroll view,我们可以完整的把登入/注册页面装不下的所有栏位透过滑动的方式让使用者看到。

viewDidLoad

view.addSubview(scrollView)

然後在viewDidLoad中加入新增的这个scrollview。
因为没有特别需要缩放的设定,因此这样就可以了!

接着回到LoginViewController class中新增我们需要的栏位如下

private let emailField: UITextField = {
    let field = UITextField()
    field.autocorrectionType = .no
    field.autocapitalizationType = .none
    field.returnKeyType = .continue
    field.layer.cornerRadius = 12
    field.layer.borderWidth = 1
    field.layer.borderColor = UIColor.lightGray.cgColor
    field.placeholder = "Email Address"
    field.leftView = UIView(frame: CGRect(x: 0, y:0, width: 5, height: 0)) // padding
    field.leftViewMode = .always
    field.backgroundColor = .white
    return field
}()

private let passwordField: UITextField = {
    let field = UITextField()
    field.autocorrectionType = .no
    field.autocapitalizationType = .none
    field.returnKeyType = .done
    field.layer.cornerRadius = 12
    field.layer.borderWidth = 1
    field.layer.borderColor = UIColor.lightGray.cgColor
    field.placeholder = "Password"
    field.leftView = UIView(frame: CGRect(x: 0, y:0, width: 5, height: 0)) // padding
    field.leftViewMode = .always
    field.backgroundColor = .white
    field.isSecureTextEntry = true
    return field
}()

大部分都是一些UI的设定。比较值得注意的是returnKeyType会影响键盘的return键显示。因此,在这边password是最後一栏,我们就把return key type设定为.done

然後如前一个做法,我们把新增的栏位放入scroll view当中。

viewDidLoad

scrollView.addSubview(emailField)
scrollView.addSubview(passwordField)

viewDidLayoutSubviews

稍微调整一下UI的显示

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    scrollView.frame = view.bounds
    let size = scrollView.width/3
    imageView.frame = CGRect(x: (scrollView.width-size)/2,
                             y: 20,
                             width: size,
                             height: size)

    emailField.frame = CGRect(x: 30,
                              y: imageView.bottom+10,
                             width: scrollView.width-60,
                             height: 50)
    passwordField.frame = CGRect(x: 30,
                              y: emailField.bottom+10,
                             width: scrollView.width-60,
                             height: 50)
}

按钮

最後一个是提交的按钮,我们先把UI做出来。
希望的情境是,在使用者按下按钮後,可以把相对的资料传送到後端资料库做登入/注册。

LoginViewController

private let loginButton: UIButton = {
   let button = UIButton()
    button.setTitle("Sign In", for: .normal)
    button.backgroundColor = .link
    button.setTitleColor(.white, for: .normal)
    button.layer.cornerRadius = 12
    button.layer.masksToBounds = true
    button.titleLabel?.font = .systemFont(ofSize: 20, weight: .bold)
    return button
}()

好了之後就加入scroll view的subview。

viewDidLoad

scrollView.addSubview(loginButton)

结语

今天的内容也是没有很长,实在不知道按照这个节奏能不能把app写完XDD
说实在的,我也不知道自己到底有没有喜欢写app。平常写後端都没有介面,因此能看到画面是蛮好玩的啦,但有时也蛮琐碎的,就有点讨厌,哈哈。

参考资料

UIScrollView 滚动视图初学者指南

若上述内容有误或可以改进的部分,欢迎留言以及提出任何指教~
谢谢 o(〃^▽^〃)o


<<:  【Day13】特殊性营运流程篇-维修

>>:  Day12 - 【概念篇】OAuth flows: flows这一小段路上路前注意事项

【DAY 4】 Power Automate 简介 + 订便当系统

哈罗大家好~ 今天要简单说明 “ Power Automate “ 这个强大的流程引擎以及示范一个用...

Day 20. Zabbix 问题回报与纪录介绍

今天要跟大家介绍不是技术,但是蛮重要问题处理流程与纪录功能,这也是 Zabbix 本身就有的功能~ ...

[Day19] TS:什麽!泛型的参数还能有预设值?

今天这个范例是来自第三方套件 utility-types,在有了前几天的知识後,让我们来试着了解这...

Day 01: 【序】– 架构与设计、代码、工程师

「你因为两个原因来读这本书:首先,你是位程序设计师。再者,你想成为一位更好的程序设计师」 取自: ...

Rust-流程控制-while

类似PHP的while回圈,计算其後的布林条件如果是值为true则执行大括号下面的语法,会重复条件的...