iPhone 앱에서 UIButton / UILabel '패딩'을 달성하는 방법
내 iPhone 응용 프로그램에는 패딩이 필요한 다양한보기가 있습니다. 예를 들어 텍스트가 왼쪽으로 정렬 된 사용자 정의 UIButton과 배경색이있는 UILabel이 있습니다.
이것은 정말 어리석은 질문 일 수 있지만 '패딩'을 적용하여 텍스트를 왼쪽 가장자리 밖으로 이동하려면 어떻게해야합니까?
나는 성공하지 않고 경계 등을 사용하는 데 지쳤습니다.
UILabel
배경색 으로 래퍼 뷰를 만들 수 있다는 것을 알고 있지만 과도하게 보입니다.
감사합니다.
내가 사용하고 자동 레이아웃을 . 나를 위해 일한 솔루션이 설정되었다 UIButton
의 contentEdgeInsets
.
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)
Ok 지금까지 찾은 가장 간단한 해결책은 다음과 같습니다.
self.textAlignment = UITextAlignmentCenter;
[self sizeToFit];
CGRect frame = self.frame;
frame.size.width += 20; //l + r padding
self.frame = frame;
정확히 내가 원했던 것은 아니지만 작동합니다.
UIButton
텍스트에 패딩을 설정하려면 UIButton
의 contentEdgeInsets
속성 을 사용해야 합니다.
스토리 보드에서 콘텐츠 삽입을 설정하려면 다음 단계를 수행하십시오.
- 보기 컨트롤러를 선택한 다음
UIButton
- 유틸리티 패널 (Command + Option + 0)로 이동하여 Attributes Inspector (Command + Option + 4)를 선택합니다.
- 이제 Edge 에서 콘텐츠 를 선택 하고 요구 사항에 따라 삽입 을 설정 합니다 (스크린 샷 참조).
UILabel에 패딩을 추가하는 가장 유연한 방법은 UILabel을 하위 클래스로 만들고 edgeInsets 속성을 추가하는 것입니다. 그런 다음 원하는 삽입을 설정하면 그에 따라 레이블이 그려집니다.
OSLabel.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
에 엑스 코드 (9) , 인 세트는 현재에있는 크기 경위 대신 검사기 속성의 :
CGRectInset 은 당신의 친구입니다. 음수 '삽입'을 설정하여 패딩을 만들 수 있습니다.
[self sizeToFit];
CGRect rect = self.frame;
rect = CGRectInset( rect, -6.f, -5.f); // h inset, v inset
self.frame = rect;
Here's a sublass of UILabel that has customizable padding using an edgeInset property:
PaddedLabel.h
#import <UIKit/UIKit.h>
@interface PaddedLabel : UILabel
@property UIEdgeInsets edgeInsets;
@end
PaddedLabel.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
(This is a simplification of Brody's answer which also works with autolayout.)
I'm trying to achieve a similar thing, that is 'pad' a UILabel
. I've been trying to implement the solution that Toby posted above, but can't seem to find where this needs to go. The UILabel I'm working with is aligned left - is that what's causing the issue?
I've tried using this in viewDidLoad
, and even in a subclass of UILabel in the method:
- (CGRect)textRectForBounds:(CGRect)bounds
limitedToNumberOfLines:(NSInteger)numberOfLines
What about creating a custom class that extends UIButton and overriding this:
- (CGRect)titleRectForContentRect:(CGRect)contentRect
{
return UIEdgeInsetsInsetRect(contentRect, UIEdgeInsetsMake(topPadding, rightPadding, bottomPadding, leftPadding));
}
In the case of UILabel just override:
- (CGRect)textRectForBounds:(CGRect)bounds
limitedToNumberOfLines:(NSInteger)numberOfLines;
If you're just looking for a horizontal padding on one line, then this may be enough (it was for me):
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
'Program Tip' 카테고리의 다른 글
bash 스크립트에서 찾기 결과를 어떻게 처리 할 수 있습니까? (0) | 2020.12.10 |
---|---|
Linux 명령 줄을 사용하여 HTML 이메일을 보내는 방법 (0) | 2020.12.10 |
Linux 명령 줄 호출이 os.system에서해야하는 것을 반환하지 않습니까? (0) | 2020.12.10 |
Mac OS X에서 쉘 스크립트를 통해 무선 SSID 가져 오기 (0) | 2020.12.10 |
git 로그를 텍스트 파일로 내보내려면 어떻게해야합니까? (0) | 2020.12.10 |