Human Interface Guidelines์ ๋ํ ํด์๊ณผ ์ฃผ๊ด์ ์ธ ์ฌ๋ก ๋ถ์์ ์ถ๊ฐํ ๊ธ์ ๋๋ค.
๐Web views
Web view๋ HTML์ด๋ ์น์ฌ์ดํธ์ ๊ฐ์ ํ๋ถํ ์น ์ปจํ ์ธ ๋ฅผ ์ฑ ๋ด์์ ์ง์ ์ ์ผ๋ก ๋ถ๋ฌ์ ๋ณด์ฌ์ค๋๋ค.
์๋ฅผ ๋ค์ด,
๋ฉ์ผ์์๋ ๋ฉ์ธ์ง ๋ด์ HTML ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด web view๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐Best practices
Enable forward and back navigation when appropriate
Web view์์๋ ์๋ค ํ์์ ์ ๊ณตํ์ง๋ง, ์ด ํ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๊ธฐ ์ํด ์น๋ทฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์๋ค ํ์์ด ๊ฐ๋ฅํ๊ฒ ํ๊ณ
์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด๊ธฐํํ ์ ์๋ ์ปจํธ๋กค์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
Avoid using a web view to build a web browser
Web view๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ ํ๋ฆ์์ ๋ฒ์ด๋์ง ์๊ณ ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ์ ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ ์ข์ง๋ง,
์ฌ์ฉ์๊ฐ ์น์ ๊ฒ์ํ๋ ์ฃผ์ ์๋จ์ Safari์ ๋๋ค.
์ฑ์์ Safari์ ๊ธฐ๋ฅ์ ๋ณต์ ํ๋ ค๋ ์๋๋ ๋ถํ์ํ๊ณ ๊ถ์ฅํ์ง ์์ต๋๋ค.
๐์ค์ webView
iOS ์์ ์น์ ๋ณด์ด๋ ๋ฐฉ๋ฒ
- WebView๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ ๋ด๋ถ์ ํ์
- ์ฑ์์ safari๋ฅผ ํธ์ถํ์ฌ ํด๋น URL ์ด๊ธฐ
- SFSafariViewController๋ก ์ฑ ์์์ SafariView๋ก ์ด๊ธฐ
์๋ ์์๋ 1๋ฒ ๋ฐฉ๋ฒ์ธ WKWebView๋ฅผ ์ฌ์ฉํ๋ ์์ ์ด๊ณ , ๋๋จธ์ง ๋ ๋ฐฉ๋ฒ์ ๊นํ๋ธ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์
1๏ธโฃ ๊ธฐ๋ณธ ๊ทธ๋ฅ web view
1. http ์ ๊ทผ ํ์ฉ
xcode์์๋ ์์ฒด์ ์ผ๋ก http๋ฅผ ๋ง๊ณ https ์ฌ์ฉ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์,
http๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ฐ๋ก info.plist์์ ์ค์ ํด์ค์ผ ํฉ๋๋ค.
Info.plist → Information Property List → App Transport Security Settings → Allow Arbitrary Loads
2. WKWebView ์์ฑ
import WebKit
...
private let webView = WKWebView() // ๋ ์ด์์์ Snapkit์ ์ฌ์ฉํ์ฌ ๋ณ๋๋ก ๋ง๋ค์ด์คฌ์ต๋๋ค.
...
private func setLayout() {
self.view.addSubview(webView)
// self.view.addSubview(toolBar)
// toolBar.snp.makeConstraints { make in
// make.leading.trailing.equalToSuperview()
// make.bottom.equalTo(self.view.safeAreaLayoutGuide)
// make.height.equalTo(44)
// }
webView.snp.makeConstraints { make in
make.edges.equalToSuperview()
// make.top.leading.trailing.equalToSuperview()
// make.bottom.equalTo(toolBar.snp.top)
}
}
3. URL ์์ฑ ํ load
private func setWebView() {
// self.view = webView // view ์์ฒด๋ฅผ webView๋ก ๋ฎ๊ณ ์ถ์ ๊ฒฝ์ฐ
let url = URL(string: "<https://nosy-repair-8a6.notion.site/Web-views-b0673c13e9564ecfbe880481ab74454b>")
let request = URLRequest(url: url!)
webView.load(request)
}
์๊ธฐ๊น์ง ์งํํ๋ฉด ์๋์ ๊ฐ์ด ๋ณ๋ค๋ฅธ ์ปจํธ๋กค์ด ์๋ webView๋ฅผ ๋ณด์ผ ์ ์์ต๋๋ค.
(์ด์ ๋ทฐ์์ present๋ก ๋์ด ๋ทฐ์ Web view๋ฅผ ์ฌ๋ ค์คฌ์ต๋๋ค.)
2๏ธโฃ tool bar๋ฅผ ํตํด ์ปจํธ๋กค ์ถ๊ฐํ๊ธฐ
HIG์ ์๋ด์ ๋ฐ๋ผ ์๋ค๋ฅผ ํ์ํ ์ ์๋ ๋ฒํผ์ ํฌํจํ tool bar๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค
private let toolBar = UIToolbar()
...
private func setToolBar() {
self.toolBar.backgroundColor = .white
let backButtonItem = UIBarButtonItem(title: "๋ค๋ก ๊ฐ๊ธฐ", style: .plain, target: self, action: #selector(backToView))
let forwardButtonItem = UIBarButtonItem(title: "์์ผ๋ก ๊ฐ๊ธฐ", style: .plain, target: self, action: #selector(forwardToView))
let refreshButtonItem = UIBarButtonItem(title: "์๋ก ๊ณ ์นจ", style: .plain, target: self, action: #selector(refreshView))
let items = [backButtonItem, forwardButtonItem, refreshButtonItem]
self.toolBar.setItems(items, animated: true)
}
private func setLayout() {
self.view.addSubview(webView)
self.view.addSubview(toolBar)
toolBar.snp.makeConstraints { make in
make.leading.trailing.equalToSuperview()
make.bottom.equalTo(self.view.safeAreaLayoutGuide)
make.height.equalTo(44)
}
webView.snp.makeConstraints { make in
make.top.leading.trailing.equalToSuperview()
make.bottom.equalTo(toolBar.snp.top)
}
}
@objc
private func backToView() {
if webView.canGoBack {
webView.goBack()
} else {
print("๋ค๋ก ๋ชป๊ฐ")
}
}
@objc
private func forwardToView() {
if webView.canGoForward {
webView.goForward()
} else {
print("์์ผ๋ก ๊ฐ๊ฒ ์์")
}
}
@objc
private func refreshView() {
webView.reload()
}
'UIUX' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HIG] Modality ๐ถโ๐ซ๏ธ (0) | 2022.08.01 |
---|---|
[HIG] Navigation Bar ๐งญ (0) | 2022.05.31 |
[HIG] Loading ๐ (0) | 2022.05.23 |
[HIG] Onboarding ๐ซ (0) | 2022.05.20 |
[HIG] ๐ง Tab Bars (0) | 2022.04.29 |