iOS에서 프로그래밍 방식으로 종횡비 제한을 어떻게 설정할 수 있습니까?
내 뷰 컨트롤러에 자동 레이아웃을 사용했습니다. 제약 조건에서 V 및 H 위치를 설정했지만 5s, 6 및 6 Plus로 변경 될 때 버튼 크기를 어떻게 늘릴 수 있는지 알고 싶습니다. 이것은 로그인 버튼에 대한 제약 조건을 추가 한 방법입니다.
NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary];
[btnLogin addConstraints:btncon_V];
NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:btncon_POS_H];
NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:btncon_POS_V];
하지만 내 문제는 왼쪽과 오른쪽의 간격을 관리하는 동안 높이가 고정되어 있기 때문에 iPhone 6 및 6 Plus에서 늘어나는 것입니다. 화면 크기에 따라 크기를 늘리려면 어떻게해야합니까? 이것이 종횡비라고 생각하지만 코드에서 종횡비 제약을 어떻게 설정할 수 있습니까?
이렇게. 한 번 시도하십시오.
[self.yourview setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.yourview addConstraint:[NSLayoutConstraint
constraintWithItem:self.yourview
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:self.yourview
attribute:NSLayoutAttributeWidth
multiplier:(self.yourview.frame.size.height / self.yourview.frame.size.width)
constant:0]];
또는 대신 (self.yourview.frame.size.height / self.yourview.frame.size.width)
부동 소수점 값을 사용할 수 있습니다. 감사.
Swift 3.0-
self.yourview!.translatesAutoresizingMaskIntoConstraints = false
self.yourview!.addConstraint(NSLayoutConstraint(item: self.yourview!,
attribute: NSLayoutAttribute.height,
relatedBy: NSLayoutRelation.equal,
toItem: self.yourview!,
attribute: NSLayoutAttribute.width,
multiplier: self.yourview.frame.size.height / self.yourview.frame.size.width,
constant: 0))
레이아웃 앵커 는 프로그래밍 방식으로 제약 조건을 설정하는 가장 편리한 방법입니다.
버튼의 가로 세로 비율을 5 : 1로 설정하고 싶다면 다음을 사용해야합니다.
button.heightAnchor.constraint(equalTo: button.widthAnchor, multiplier: 1.0/5.0).isActive = true
다음은 전체 코드입니다.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .custom)
button.setTitle("Login", for: .normal)
button.backgroundColor = UIColor.darkGray
self.view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
let margins = view.layoutMarginsGuide
button.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 20.0).isActive = true
button.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: -20.0).isActive = true
button.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: -20.0).isActive = true
button.heightAnchor.constraint(equalTo: button.widthAnchor, multiplier: 1.0/5.0).isActive = true
}
}
위에 작성된 코드로 얻은 결과는 다음과 같습니다. 버튼이 다양한 기기에서 5 : 1 종횡비를 유지하는 것을 볼 수 있습니다.
스위프트 3 :
yourView.addConstraint(NSLayoutConstraint(item: yourView,
attribute: .height,
relatedBy: .equal,
toItem: yourView,
attribute: .width,
multiplier: 9.0 / 16.0,
constant: 0))
Interface Builder의 디자인 타임에 "Height constraint"를 설정할 수 있습니다. ' "빌드시 제거"를 선택하면 앱이 실행될 때 제거됩니다.
그런 다음 예를 들어 viewDidLoad 메서드에서 "Aspect Ratio"제약 조건을 추가 할 수 있습니다.
Xamain.iOS에서 "16 : 9"는 다음과 같습니다.
this.ImageOfTheDay.AddConstraint(NSLayoutConstraint.Create(
this.ImageOfTheDay,
NSLayoutAttribute.Height,
NSLayoutRelation.Equal,
this.ImageOfTheDay,
NSLayoutAttribute.Width,
9.0f / 16.0f,
0));
또는 Mahesh Agrawal이 말했듯이 :
[self.ImageOfTheDay addConstraint:[NSLayoutConstraint
constraintWithItem:self.ImageOfTheDay
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:self.ImageOfTheDay
attribute:NSLayoutAttributeWidth
multiplier:(9.0f / 16.0f)
constant:0]];
위의 모든 답변을 시도했지만 작동하지 않았으며 이것이 신속한 3을 사용한 내 솔루션입니다.
let newConstraint = NSLayoutConstraint(item: yourView, attribute: .width, relatedBy: .equal, toItem: yourView, attribute: .height, multiplier: 560.0/315.0, constant: 0)
yourView.addConstraint(newConstraint)
NSLayoutConstraint.activate([newConstraint])
NSLayoutConstraint.deactivate(yourView.constraints)
yourView.layoutIfNeeded()
UIView의 도우미 확장
extension UIView {
func aspectRation(_ ratio: CGFloat) -> NSLayoutConstraint {
return NSLayoutConstraint(item: self, attribute: .height, relatedBy: .equal, toItem: self, attribute: .width, multiplier: ratio, constant: 0)
}
}
그리고 사용법은 다음과 같습니다.
view.aspectRation(1.0/1.0).isActive = true
'UFO ET IT' 카테고리의 다른 글
iPhone 프로그래밍에서 HTTP 서버에 파일 업로드 (0) | 2020.12.11 |
---|---|
jQuery UI없이 드래그 가능한 div (0) | 2020.12.10 |
Docker 머신 위치 변경-Windows (0) | 2020.12.10 |
localhost 및 0.0.0.0 용 IPV6은 무엇입니까? (0) | 2020.12.10 |
각도 2 formarray에서 모든 항목을 제거 (0) | 2020.12.10 |