2014-10-30 24 views
6

Ich habe eine Schaltfläche, die zwei verschiedenen Text im ausgewählten Zustand und Normalzustand hat, Wenn ich den Status der Schaltfläche programmatisch ändern Schaltfläche wird nicht geändert, so Text wird nicht richtig angezeigt, was der beste Weg ist Mach das mit dem automatischen Layout?UIButton dynamische Breite mit Autolayout

Ich kenne einen Weg Steckdose UIButton Breite Einschränkung einstellen und manuell ändern, aber ich bin auf der Suche nach besseren Weg

+1

http://stackoverflow.com/questions/4135032/ios-uibutton-resize-according-to-text-length – Alfa

+0

Bereits gelesen, dass aber nicht viel hilft :( – Abhishek

+0

Während der Zustand der Schaltfläche ändern - Taste Größe groß zu machen genug, dass String kann leicht in ihm kommen, aber bevor Sie bitte die Mitte des Knopfes in Variable speichern dann verwenden Sie Fit-to-Size-Methode und dann wieder die gleiche Mitte zum Button – Alfa

Antwort

-2

Versuchen Sie, diese

CGSize maxSize = CGSizeMake(btn.bounds.size.width, CGFLOAT_MAX); 
    CGSize textSize1 = [btn.titleLabel.text sizeWithFont:btn.titleLabel.font constrainedToSize:maxSize]; 

btn.frame=CGSizeMake(10,10,textSize1.width,30); 
+2

Im Allgemeinen setzen wir nicht Frame in Autolayout – Abhishek

0

Sie Standardschaltfläche wie folgt verwenden können:

UIButton* button = [UIButton buttonWithType:UIButtonTypeSystem]; 
[button setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[button setTitle:@"Normal" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside]; 
[button setTitle:@"Selected" forState:UIControlStateSelected]; 
[self.view addSubview:button]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[button]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(button)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[button]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(button)]]; 

Wenn Sie benutzerdefinierte Schaltfläche verwenden, dann ist der einfachste Weg, den ich mir vorstellen kann, UIButton der Unterklasse und fügen Sie Ihre benutzerdefinierte UILabel in. Hier ist mein kurzer Code von dem, was ich meine:

@interface CustomButton : UIButton 
{ 
    NSString* _normalTitle; 
    NSString* _selectedTitle; 
} 
@property UILabel* customLabel; 

@end 

@implementation CustomButton 

@synthesize customLabel=_customLabel; 

- (instancetype)init; 
{ 
    self = [super init]; 
    if (self) { 
    [self setBackgroundColor:[UIColor greenColor]]; 

    _customLabel = [UILabel new]; 
    [_customLabel setTextColor:[UIColor whiteColor]]; 
    [_customLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self addSubview:_customLabel]; 

    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_customLabel]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_customLabel)]]; 
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_customLabel]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_customLabel)]]; 
} 
return self; 
} 
- (void)setTitle:(NSString *)title forState:(UIControlState)state; 
{ 
    if (state == UIControlStateNormal) { 
     _normalTitle = title; 
    } else if (state == UIControlStateSelected) { 
     _selectedTitle = title; 
    } 
    [self setSelected:[self isSelected]]; 
} 
- (void)setSelected:(BOOL)selected; 
{ 
    [super setSelected:selected]; 
    if (selected) { 
     [_customLabel setText:_selectedTitle]; 
    } else { 
     [_customLabel setText:_normalTitle]; 
    } 
} 

@end 
0

Wenn Sie Einschränkungen erstellen weisen es Variablen

@property (nonatomic, strong)NSLayoutConstraint *viewConstraintTop; 
self.viewConstraintTop = [Your Constraint];//Initial state 

On-Taste tippen prüfen, ob es aktiviert ist oder not.Remove die Einschränkungen und entsprechende Einschränkungen erneut anwenden .

[self.viewConstraintTop autoRemove]; 
self.viewConstraintTop = [Your Constraint]; 
3

Nur durch [button invalidateIntrinsicContentSize]; sagen, sollte es tun, was Sie es zu tun erwarten.

+0

Dies rettete meinen Tag - Danke! – MrBr

Verwandte Themen