어떻게 해야 최대한 깔끔하게 코드를 작성할 수 있는지 고민하며 프로젝트를 진행하려 했습니다.
근데 실력이 좋지 않아서 깔끔하지 못한 코드가 나온... 초보인 점을 양지해주시길...!
.vertical (수직, 위 아래), .horizontal(수평, 양 옆)
두 가지 경우를 골라서 사용하면 된다..center, .leading, .trailing, .fill, .firstBaseline, .lastBaseline
등의 선택지가 있다. 기본값은 .fill
.fill, .fillEqually, .fillProportionally, .equalSpacing, .equalCentering
다섯 가지의 선택지가 있음.CGFloat
형식의 값을 받을 수 있다.private func setConstraint() {
userInfoLabel.translatesAutoresizingMaskIntoConstraints = false
menuButton.translatesAutoresizingMaskIntoConstraints = false
userProfilePicture.translatesAutoresizingMaskIntoConstraints = false
userPostNum.translatesAutoresizingMaskIntoConstraints = false
postStack.translatesAutoresizingMaskIntoConstraints = false
followerStack.translatesAutoresizingMaskIntoConstraints = false
followingStack.translatesAutoresizingMaskIntoConstraints = false
userFollowStack.translatesAutoresizingMaskIntoConstraints = false
userInfoStack.translatesAutoresizingMaskIntoConstraints = false
middleBarStack.translatesAutoresizingMaskIntoConstraints = false
navStack.translatesAutoresizingMaskIntoConstraints = false
moreButton.translatesAutoresizingMaskIntoConstraints = false
profileButton.translatesAutoresizingMaskIntoConstraints = false
customCollectionView.translatesAutoresizingMaskIntoConstraints = false
bottomStack.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
userInfoLabel.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
userInfoLabel.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 10),
menuButton.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 10),
menuButton.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -14),
userProfilePicture.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 14),
userProfilePicture.topAnchor.constraint(equalTo: self.userInfoLabel.bottomAnchor, constant: 14),
userFollowStack.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -28),
userFollowStack.leadingAnchor.constraint(equalTo: self.userProfilePicture.trailingAnchor),
userFollowStack.centerYAnchor.constraint(equalTo: self.userProfilePicture.centerYAnchor),
userInfoStack.topAnchor.constraint(equalTo: self.userProfilePicture.bottomAnchor, constant: 14),
userInfoStack.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor, constant: 14),
moreButton.topAnchor.constraint(equalTo: self.userInfoStack.bottomAnchor, constant: 14),
moreButton.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor),
moreButton.centerYAnchor.constraint(equalTo: self.middleBarStack.centerYAnchor),
middleBarStack.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor, constant: 14),
middleBarStack.topAnchor.constraint(equalTo: self.userInfoStack.bottomAnchor, constant: 14),
middleBarStack.trailingAnchor.constraint(equalTo: self.moreButton.leadingAnchor, constant: 8),
navStack.topAnchor.constraint(equalTo: self.middleBarStack.bottomAnchor, constant: 14),
navStack.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
navStack.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor),
navStack.heightAnchor.constraint(equalToConstant: 40),
customCollectionView.topAnchor.constraint(equalTo: self.navStack.bottomAnchor, constant: 10),
customCollectionView.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
customCollectionView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor),
customCollectionView.bottomAnchor.constraint(equalTo: self.bottomStack.topAnchor, constant: -14),
bottomStack.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor, constant: -10),
bottomStack.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
bottomStack.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor)
])
}
// MARK: add things into view
private func addViews() {
[userPostNum, postLabel].map ({
self.postStack.addArrangedSubview($0)
})
[userFollowerNum, followerLabel].map ({
self.followerStack.addArrangedSubview($0)
})
[userFollowingNum, followingLabel].map ({
self.followingStack.addArrangedSubview($0)
})
[postStack, followerStack, followingStack].map {
self.userFollowStack.addArrangedSubview($0)
}
[userNicknameLabel, userBioLabel, userLinkLabel].map {
self.userInfoStack.addArrangedSubview($0)
}
[followButton, MessageButton].map {
self.middleBarStack.addArrangedSubview($0)
}
[gridButton, unknownButton, unknown2Button].map {
self.navStack.addArrangedSubview($0)
}
[profileButton].map {
self.bottomStack.addArrangedSubview($0)
}
view.addSubview(userInfoLabel)
view.addSubview(menuButton)
view.addSubview(userProfilePicture)
view.addSubview(userFollowStack)
view.addSubview(userInfoStack)
view.addSubview(middleBarStack)
view.addSubview(navStack)
view.addSubview(moreButton)
view.addSubview(customCollectionView)
view.addSubview(bottomStack)
}
NSLayoutConstraint.activate([......])
를 사용해서 제약조건 설정할 때, .isActive = true
부분을 없앴다. 그래도 워낙 들어간 요소들이 많아서 코드가 지저분하게 보이는 것 같다.MARK:
주석을 달아서 Xcode 상단 바에서도 접근할 수 있도록 노력했다.