๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽ iOS/UI59

[iOS/UI] ํƒญ๋ฐ” ๊ธธ์ด ์กฐ์ • ๋ฐ ์•„์ดํ…œ ์œ„์น˜ ๋ฐฐ์—ด(UITabBar height & UITabBar item image insets) ์•„๋ž˜์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ๋‚ด ๊ธฐ์ค€์—์„  ํƒญ๋ฐ” ์•„์ดํ…œ๋“ค์ด ์‚ด์ง ์œ„๋กœ ๊ฐ€์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ ์• ํ”Œ๋ฌธ์„œ์—์„œ ์•„๋ž˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ธ์…‹์ด๋ผ๋Š” ๊ฑด๋ฐ ๊ฐ ๊ผญ์ง€์ ๋“ค์„ ์ง€์ •ํ•ด ์œ„์น˜๋ฅผ ์žฌ๋ฐฐ์—ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์šฐ์„  ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ํƒญ๋ฐ”์•„์ดํ…œ ์œ„์น˜๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์„ ํด๋ฆญํ•˜๊ณ  ์ธ์ŠคํŽ™ํ„ฐ๋ฅผ ์—ด๋ฉด 6๋ฒˆ์งธ size ์ธ์ŠคํŽ™ํ„ฐ์— image inset์ด ์žˆ๋‹ค. ๋ชจ๋‘ 0์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. ๋‚œ ์•„์ดํ…œ๋“ค์„ ๋‚ด๋ ค์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”ํ…€์— -20๊ฐ’์„ ์ค˜๋ณด์•˜๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ ์ž˜ ์•ˆ๋ณด์ผ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์•„๋ž˜๋กœ ์•ฝ๊ฐ„ ์ด๋™ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๋˜ ์•„์ดํ…œ์„ ๋‚ด๋ฆฌ๊ธฐ๋ณด๋‹จ ํƒญ๋ฐ” ๋†’์ด๋ฅผ ์ค„์ด๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์— ํƒญ๋ฐ” ํ—ค์ดํŠธ๋ฅผ ์กฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ฒŒ ๋˜์—ˆ๊ณ  ์‰ฝ๊ฒŒ ์›ํ•˜๋Š” ๊ธธ์ด๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ex.. 2019. 12. 29.
[iOS/UI] UICollectionView ์Šคํฌ๋กคํ•˜๋ฉด ์„œ์น˜๋ฐ” ์ˆจ๊ธฐ๊ธฐ ์ฝœ๋ ‰์…˜๋ทฐ๋ฅผ ์Šคํฌ๋กคํ•˜๋Š” ๋ฒ•์„ ์•Œ์•„๋‚ด๋Š” ๊ฑด scrollViewDidScroll์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์“ฐ๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. //์ฝœ๋ ‰์…˜๋ทฐ์˜ ํ•˜์œ„ํด๋ž˜์Šค๊ฐ€ ์Šคํฌ๋กค๋ทฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ๋ ‰์…˜๋ทฐ ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค. func scrollViewDidScroll(_ scrollView: UIScrollView) { let actualPosition = scrollView.panGestureRecognizer.translation(in: scrollView.superview) //์Šคํฌ๋กค ์•„๋ž˜์ธ์ง€ ์œ„์ธ์ง€ ์•Œ์•„๋‚ด๋Š” ํฌ์ง€์…˜ if (actualPosition.y > 0){ // ์•„๋ž˜๋กœ ๋‚ด๋ฆฐ ๊ฒƒ searchheight.constant = 38 //searchbarheight๋ฅผ 38๋กœ ๋ฐ”๊ฟˆ UIView.animate(.. 2019. 12. 26.
[iOS/UI]UICollectionView header๋งŒ๋“ค๊ธฐ(UICollectionReusableView) ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ํ•ด๋‹น ์ฝœ๋ ‰์…˜๋ทฐ์— CollectionReusableView๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€ ๋’ค UICollectionReusableView ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. CollectionReusableView ํด๋ž˜์Šค์— ์ƒ์„ฑํ•ด์ค€ ํŒŒ์ผ ์ด๋ฆ„์„ ์ ๊ณ  identifier์˜ ์ด๋ฆ„์„ ๋”ฐ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝœ๋ ‰์…˜๋ทฐ๊ฐ€ ์žˆ๋Š” ํด๋ž™์Šค์— ์•„๋ž˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋! func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { //ofKind์— UICollectionView.elementKindSectionHea.. 2019. 12. 26.
[iOS/UI] UIButton ์œ„์—๋งŒ ๋‘ฅ๊ธ€๊ฒŒ ํ•˜๊ธฐ //์ต์Šคํ…์…˜์„ ์„ค์ •ํ•ด์ฃผ๊ณ  extension UIButton { func roundedButton(){ clipsToBounds = true //๋ทฐ์˜ ํ…Œ๋‘๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ์งค๋ฆฌ๊ฒŒ ๋œ๋‹ค. layer.cornerRadius = 10 //์–ผ๋งŒํผ ๋‘ฅ๊ธ€๊ฒŒ layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] //์ œ์ผ ์™ผ์ชฝ์œ„์—์„œ ์ œ์ผ ์˜ค๋ฅธ์ชฝ ์œ„๊นŒ์ง€ ๋‘ฅ๊ธ€๊ฒŒ // ์•„๋ž˜๋Š” ๋ฒ„ํŠผ์˜ ๋ณด๋”๋ฅผ ์ •ํ•ด์ฃผ๋Š”๊ฒƒ // layer.borderWidth = 1 // layer.borderColor = UIColor(displayP3Red: 211/255, green: 211/255, blue: 211/255, alpha: 1).cgColor } } override func view.. 2019. 12. 26.
[iOS/UI] UITableView ์ž์ฒด Height ์„ค์ •ํ•˜๊ธฐ (NSLayoutConstraint) TableView์˜ Rowํ–‰ ๋ง๊ณ  ๊ทธ ์ž์ฒด์˜ ๋†’์ด๋ฅผ ์ •ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ TableView Height๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด Storyboard์—์„œ height๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ณ  ๊ทธ NSLayoutConstraint์„ ํ•ด๋‹น ๋ทฐ์— ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ  ๊ทธ ์•„์›ƒ๋ ›์—์„œ .constant = ์›ํ•˜๋Š” ๊ฐ’์„ ํ•ด์ฃผ๋ฉด ์„ค์ •๋œ๋‹ค. 2019. 12. 12.
[iOS] CollectionViewCell ์ขŒ์ธก์œผ๋กœ ์ •๋ ฟ๋ผ๊ธฐ ์ฝœ๋ ‰์…˜๋ทฐ์—์„œ item๊ฐ„ minspacing์„ ์ •ํ•ด์ฃผ์–ด๋„ ์…€ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ŠคํŽ˜์ด์‹ฑ์ด ๋‹ฌ๋ผ์กŒ๋‹ค. ๊ตฌ๊ธ€์— ๊ฒ€์ƒ‰ํ•ด๋ณธ ๊ฒฐ๊ณผ ์ฝœ๋ ‰์…˜๋ทฐ๋ฅผ ์ขŒ์ธก์— ๋ฐฐ์—ดํ•ด์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๋‹ค. ๊ทธ๋ž˜์„œ ์•„์ฃผ ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ DGCollectionViewLeftAlignFlowLayout๋ฅผ ์ฐพ์•˜๋‹ค. ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์› ๋‹ค. pod 'DGCollectionViewLeftAlignFlowLayout' //ํŒ“ํŒŒ์ผ์— ์ถ”๊ฐ€ import DGCollectionViewLeftAlignFlowLayout //์ž„ํฌํŠธ ํ•ด๋‹นํด๋ž˜์Šค์— UICollectionViewDelegateFlowLayout๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. override func viewdidload()๋‚˜ override func awakeFromNib()// ์ด๊ณณ์— ์•„๋ž˜ ์ถ”๊ฐ€ colle.. 2019. 12. 11.
[iOS/UI] Readmore ๊ตฌํ˜„ํ•˜๊ธฐ ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๋“ค์„ ์„ ์–ธํ•ด๋†“๊ณ  class Main: UITableViewController { var headerheight = 215 var headerheights = [Int : Int]() var moreless = "more" var moreindex = 100 var morearray = [Int]() ์šฐ์„  ์…€ ์•ˆ์˜ ๋ฒ„ํŠผ์— addTarget ํ•ด์ค€๋‹ค. action์•ˆ์—๋Š” ์„ค์ •ํ•ด๋†“์€ ํ•จ์ˆ˜๋ฅผ ์ง‘์–ด๋„ฃ๋Š”๋‹ค. cell.morebtn.addTarget(self, action:#selector(Main.more(sender:)) , for: UIControl.Event.touchUpInside) ์„ค์ •ํ•ด๋†“์€ more์ด๋ผ๋Š” ํ•จ์ˆ˜ ์•ˆ์— ๋†’์ด๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ•จ์ˆ˜ heightForView๋ฅผ ์ด์šฉํ•ด ๊ธธ์ด๋ฅผ ์•Œ์•„๋‚ด๊ณ  sender.. 2019. 12. 11.
[iOS/UI] UIAlertController ๊ธ€์”จ์ƒ‰๋ฐ”๊พธ๊ธฐ let alertController = UIAlertController(title: "", message: "", preferredStyle: .alert) let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (action) in // Cancel๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ ๋ญํ• ๊ฑฐ์•ผ } alertController.addAction(cancelAction) let OKAction = UIAlertAction(title: "OK", style: .default) { (action) in } OKAction.setValue(UIColor(displayP3Red: 162/255, green: 32/255, blue: 58/255, alpha: 1), f.. 2019. 12. 11.
[iOS/UI] UILabel ํŠน์ • ๋ถ€๋ถ„์— ๋ฐ‘์ค„ ๊ธ‹๊ธฐ wholeStr์— ์›ํ•˜๋Š” ์ „์ฒดํ…์ŠคํŠธ๋ฅผ ์จ์ฃผ๊ณ  ๊ทธ๋ฆฌ๊ณ  rangeToUnderLine์—” wholeStr์ค‘ ๋ฐ‘์ค„์„ ์›ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ ์—ˆ๋‹ค๋‹ค (range(of:) ์ด๊ณณ์—) let rangeToUnderLine = NSRange(location: 0, length: 10)) 2019. 12. 4.
[iOS/UI] UITabbar ๊ฐ€์šด๋ฐ์— ๋ฒ„ํŠผ ๋„ฃ๊ธฐ ํƒญ๋ฐ”๋ฅผ ์ด์šฉํ•˜๋‹ค๋ณด๋ฉด ๊ฐ€์šด๋ฐ๋‚˜ ํ˜น์€ ๋‹ค๋ฅธ ๊ณณ์— ๋ฒ„ํŠผ์ฒ˜๋Ÿผ ๋†“๊ณ ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํƒญ๋ฐ”๋Š” ๋ˆŒ๋ €์„ ๋•Œ๋งŒ ๊ทธ ์•ˆ์— ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ฒ„ํŠผ์„ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ์š” ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค! ์ฒซ๋ฒˆ์งธ๋กœ UITabbarController๋ฅผ ํ–‰์„ฑํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  setupMiddleButton์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๊ทธ ์•ˆ์— menuButton์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๊ทธ ๋’ค ๋ฐฐ๊ฒฝ์ƒ‰์„(backgroundColor) ์ •ํ•˜๊ณ  ์›ํ•˜๋Š” ์ด๋ฏธ์ง€(setImage)๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ์ฑ„์›Œ๋„ฃ์„ ๊ฒƒ์ธ์ง€๋„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.(contentMode) ๊ทธ๋ฆฌ๊ณ  ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๊ฒŒ addTarget์„ ์„ค์ •ํ•ด์ฃผ๊ณ  ์…€๋ ‰ํ„ฐ ์•ˆ์— menuButtonActionํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ๊ทธ ๋’ค์— ์ฝ”๋“œ๋Š” ํœด๋Œ€ํฐ๋งˆ๋‹ค ํ™”.. 2019. 11. 26.
[iOS] ํ™”๋ฉด์ „ํ™˜์‹œ ํ’€์Šคํฌ๋ฆฐ์œผ๋กœ ๋งŒ๋“ค๊ธฐ (modaPresentaionStyle FullScreen) ํ™”๋ฉด ์ด๋™์„ ํ•  ๋•Œ ํ™”๋ฉด์ด ์Œ“์ด๋ฉด์„œ ํ™”๋ฉด์ด ์•ฝ๊ฐ„ ์•„๋ž˜๋กœ ๊ฐ€๋Š” ํ˜„์ƒ์„ ๊ฒช๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‚˜๋Š” ํ™”๋ฉด์„ ๊ฝ‰ ์ฑ„์šฐ๊ณ ์‹ถ์€๋ฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜์ง€ ํ•˜๋ฉฐ ๊ตฌ๊ธ€๋ง์„ ํ•˜๋‹ค๊ฐ€ ํ•ด๋‹ต์„ ์ฐพ์•˜๋Š”๋ฐ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ฒซ๋ฒˆ์งธ๋Š” ํ•ด๋‹น ๋ทฐ์ปจ๋“œ๋กค๋Ÿฌ์˜ Presentaion์„ Full Screen์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.(์›๋ž˜๋Š” Automatic์ด๋ผ ๋˜์–ด์žˆ๋Š”๋ฐ ์˜คํ† ๋งคํ‹ฑ์œผ๋กœ ๋˜์–ด์žˆ์œผ๋ฉด ์ € ์œ„ ํ™”๋ฉด์ฒ˜๋Ÿผ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.) ์ฝ”๋“œ๋กœ ํ™”๋ฉด์„ ์ด๋™ํ•  ๋•Œ๋Š” ์ € modaPresentaionStyle์„ .fullScreen์œผ๋กœ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ฝ”๋“œ๋‚˜ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๋ฐ”๊พผ ๊ฒฐ๊ณผ ํ™”๋ฉด์ด ๊ฝ‰ ์ฐจ๊ฒŒ ๋˜์—ˆ๋‹ค. 2019. 11. 25.
728x90
๋ฐ˜์‘ํ˜•