IPhoneアプリケーションには、パディングを必要とするさまざまなビューがあります。たとえば、テキストを左揃えにしたカスタムUIButtonや、背景色を使用したUILabelです。
これは本当にばかげた質問かもしれませんが、「パディング」を適用してテキストを左端から移動するにはどうすればよいですか?
私は成功せずに境界などを使用して疲れています。
背景色でUILabel
のラッパービューを作成できることは知っていますが、やり過ぎのようです。
どうもありがとう。
OKこれまで見つけた最も簡単な解決策は次のとおりです。
self.textAlignment = UITextAlignmentCenter;
[self sizeToFit];
CGRect frame = self.frame;
frame.size.width += 20; //l + r padding
self.frame = frame;
まさに私が望んでいたものではありませんが、うまくいきます。
自動レイアウトを使用しています。私のために働いた解決策は、UIButton
の-contentEdgeInsets
を設定することでした。
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)
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
以下は、edgeInsetプロパティを使用してカスタマイズ可能なパディングを持つUILabelのサブラスです。
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
(これは、自動レイアウトでも機能するBrodyの答えを単純化したものです。)
CGRectInsetはあなたの友達です。負の「インセット」を設定してパディングを作成できます。
[self sizeToFit];
CGRect rect = self.frame;
rect = CGRectInset( rect, -6.f, -5.f); // h inset, v inset
self.frame = rect;
UIButtonを拡張し、これをオーバーライドするカスタムクラスを作成するとどうなりますか。
- (CGRect)titleRectForContentRect:(CGRect)contentRect
{
return UIEdgeInsetsInsetRect(contentRect, UIEdgeInsetsMake(topPadding, rightPadding, bottomPadding, leftPadding));
}
UILabelの場合は、単にオーバーライドします。
- (CGRect)textRectForBounds:(CGRect)bounds
limitedToNumberOfLines:(NSInteger)numberOfLines;
1行の水平方向のパディングを探しているだけなら、これで十分かもしれません(私にとってはそうでした):
NSString* padding = @" "; // 2 spaces
myLabel.text = [NSString stringWithFormat:@"%@%@%@", padding, name, padding];
私は同様のことを達成しようとしています。それはUILabel
を「パッド」します。私はトビーが上に投稿したソリューションを実装しようとしましたが、これがどこに行く必要があるのか見つけることができないようです。私が作業しているUILabelは左揃えになっています-それが問題の原因ですか?
私はviewDidLoad
でこれを使用してみましたが、メソッドのUILabelのサブクラスでも使用しました:
- (CGRect)textRectForBounds:(CGRect)bounds
limitedToNumberOfLines:(NSInteger)numberOfLines