아이폰 앱에서 UIButton/UILabel '패딩'을 달성하는 방법
iPhone 응용 프로그램에서 텍스트가 왼쪽으로 정렬된 사용자 지정 UIButton과 배경색이 있는 UILabel 등 패딩이 필요한 다양한 보기가 있습니다.
이것은 정말 어리석은 질문일 수도 있지만, 텍스트를 왼쪽 가장자리에서 이동하기 위해 어떻게 '패딩'을 적용할 수 있습니까?
나는 한계 등을 사용하는 것이 아무런 성과 없이 지쳤습니다.
사용자를 위한 래퍼 보기를 만들 수 있습니다.UILabel배경색을 가지고 있지만, 과잉 살상인 것 같습니다.
대단히 고맙습니다.
자동 레이아웃을 사용하고 있습니다.나에게 효과적인 솔루션은 설정이었습니다.UIButton의
ObjC
button.contentEdgeInsets = UIEdgeInsetsMake(0.0f, 30.0f, 0.0f, 30.0f);
스위프트
button.contentEdgeInsets = UIEdgeInsets(top: 0.0, left: 30.0, bottom: 0.0, right: 30.0)
자, 제가 지금까지 찾은 가장 간단한 해결책은 다음과 같습니다.
self.textAlignment = UITextAlignmentCenter;
[self sizeToFit];
CGRect frame = self.frame;
frame.size.width += 20; //l + r padding
self.frame = frame;
제가 원했던 것은 아니지만, 효과가 있습니다.
패딩을 설정하는 방법UIButton사용할 텍스트UIButton의contentEdgeInsets소유물.
Storyboard에서 콘텐츠를 설정하려면 다음 단계를 수행합니다.
- 보기 컨트롤러를 선택한 다음
UIButton - 유틸리티 패널(명령 + 옵션 + 0)로 이동하고 속성 검사기(명령 + 옵션 + 4)를 선택합니다.
- 이제 Edge의 컨텐츠를 선택하고 요구 사항에 따라 삽입을 설정합니다(스크린샷 참조).
UILabel에 패딩을 추가하는 가장 유연한 방법은 UILabel을 하위 클래스로 분류하고 edgeInsets 속성을 추가하는 것입니다.그런 다음 원하는 삽입을 설정하면 레이블이 그에 따라 그려집니다.
OS Label.h
#import <UIKit/UIKit.h>
@interface OSLabel : UILabel
@property (nonatomic, assign) UIEdgeInsets edgeInsets;
@end
OSLabel.m
#import "OSLabel.h"
@implementation OSLabel
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.edgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if(self){
self.edgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
}
return self;
}
- (void)drawTextInRect:(CGRect)rect {
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)];
}
@end
Xcode 9에서 삽입값은 이제 Attributes Inspector 대신 Size Inspector에 있습니다.
다음은 edgeInset 속성을 사용하여 사용자 지정 가능한 패딩이 있는 UI 레이블의 하위 클래스입니다.
패딩 라벨.h
#import <UIKit/UIKit.h>
@interface PaddedLabel : UILabel
@property UIEdgeInsets edgeInsets;
@end
패딩 라벨.m
#import "PaddedLabel.h"
@implementation PaddedLabel
-(void)drawTextInRect:(CGRect)rect {
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)];
}
-(CGSize)intrinsicContentSize {
CGSize contentSize = [super intrinsicContentSize];
UIEdgeInsets insets = self.edgeInsets;
contentSize.height += insets.top + insets.bottom;
contentSize.width += insets.left + insets.right;
return contentSize;
}
@end
(이것은 자동 레이아웃에서도 작동하는 Brody의 답변을 단순화한 것입니다.)
CGRectInset은 당신의 친구입니다.음의 'insets'를 설정하여 패딩을 만들 수 있습니다.
[self sizeToFit];
CGRect rect = self.frame;
rect = CGRectInset( rect, -6.f, -5.f); // h inset, v inset
self.frame = rect;
저는 비슷한 것을 성취하려고 노력하고 있습니다. 그것은 '패드'입니다.UILabel토비가 위에 올린 솔루션을 구현하려고 했지만, 어디로 가야 할지 모르겠습니다.제가 작업하고 있는 UI 레이블이 왼쪽으로 정렬되어 있습니다. 이것이 문제의 원인입니까?
제가 이걸 사용해 봤어요.viewDidLoad방법의 UILabel 하위 클래스에서도 사용할 수 있습니다.
- (CGRect)textRectForBounds:(CGRect)bounds
limitedToNumberOfLines:(NSInteger)numberOfLines UIButton을 확장하는 사용자 지정 클래스를 만들고 이를 재정의하는 것은 어떻습니까?
- (CGRect)titleRectForContentRect:(CGRect)contentRect
{
return UIEdgeInsetsInsetRect(contentRect, UIEdgeInsetsMake(topPadding, rightPadding, bottomPadding, leftPadding));
}
UILabel의 경우 다음을 재정의합니다.
- (CGRect)textRectForBounds:(CGRect)bounds
limitedToNumberOfLines:(NSInteger)numberOfLines;
활성화할 수 있습니다.NSLayoutConstraint 사이에button그리고.button.titleLabel
let button = UIButton()
button.setTitle("Retake", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(button)
guard let label = button.titleLabel else { return }
NSLayoutConstraint.activate([
// setup constraints for button relative to view
label.leadingAnchor.constraint(equalTo: button.leadingAnchor, constant: 10),
label.centerXAnchor.constraint(equalTo: button.centerXAnchor)
])
만약 당신이 단지 한 줄에 가로 패딩을 찾고 있다면, 이것으로 충분할 것입니다 (저를 위한 것이었습니다).
NSString* padding = @" "; // 2 spaces
myLabel.text = [NSString stringWithFormat:@"%@%@%@", padding, name, padding];
언급URL : https://stackoverflow.com/questions/3052731/how-to-achieve-uibutton-uilabel-padding-in-iphone-app
'programing' 카테고리의 다른 글
| 회전을 제대로 처리하는 아이폰용 뷰포트 메타를 설정하는 방법은? (0) | 2023.07.31 |
|---|---|
| 모든 파일 및 폴더 삭제, 하위 폴더 제외 (0) | 2023.07.31 |
| "string.split is not function" 오류의 원인은 무엇입니까? (0) | 2023.07.31 |
| 트랜잭션 내부의 SELECT 문과 트랜잭션 외부의 SELECT 문이 다릅니까? (0) | 2023.07.31 |
| 너비, 내부 너비 및 외부 너비, 높이, 내부의 차이높이 및 외부높이(jQuery) (0) | 2023.07.31 |

