2017-04-17 3 views
1

Ich zeige eine Warnung auf meinem UITableView. Dies ist der CodeSchaltfläche wechseln Position, wenn Alarmansicht angezeigt wird

-(void)showAlertMaintenance{ 
AppDelegate * appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
[RMUniversalAlert showAlertInViewController:self withTitle:nil message:appDelegate.maintenanceStr cancelButtonTitle:@"OK" destructiveButtonTitle:nil otherButtonTitles:nil tapBlock:^(RMUniversalAlert * _Nonnull alert, NSInteger buttonIndex) { 
     if(buttonIndex == alert.cancelButtonIndex){ 

     } 
}]; 

}

Der Knopf ist ein Subviews eines Abschnittsheader in meinem UITableView

UIButton *sendInviteCodeButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

       [sendInviteCodeButton addTarget:self 
             action:@selector(shareInvitationCode) 
           forControlEvents:UIControlEventTouchUpInside]; 

       [sendInviteCodeButton setTitle:@"招待コードをシェアする" forState:UIControlStateNormal]; 

       [sendInviteCodeButton sizeToFit]; 
       [sendInviteCodeButton setTitleColor:[UIColor colorWithRed:215.0f/255.0f green:116.0f/255.0f blue:52.0f/255.0f alpha:1.0f] forState:UIControlStateNormal]; 
       sendInviteCodeButton.translatesAutoresizingMaskIntoConstraints = NO; 

       sendInviteCodeButton.frame = CGRectMake(20, 155.0f, SCREEN_BOUNDS_SIZE_PORTRAIT_WIDTH - 40, 30.0f); 

       [sendInviteCodeButton.layer setMasksToBounds:YES]; 
       [sendInviteCodeButton.layer setCornerRadius:5.0f]; 
       [sendInviteCodeButton.layer setBackgroundColor:[UIColor whiteColor].CGColor]; 
       [sendInviteCodeButton setBackgroundColor:[UIColor whiteColor]]; 
       [sendInviteCodeButton.titleLabel setFont:[UIFont boldSystemFontOfSize:13]]; 

       [invitationView insertSubview:sendInviteCodeButton atIndex:0]; 

Before

After

Wenn der Alarm ist zeigen d, die Taste wird in die obere linke Ecke des Bildschirms gedrückt.

Bitte helfen!

Antwort

1

Wenn Sie bereits einen bestimmten Rahmen für Ihre Schaltfläche berechnen, sollten Sie [sendInviteCodeButton sizeToFit]; entfernen.

Entfernen Sie einfach [sendInviteCodeButton sizeToFit];

Hoffe, es hilft. :)

0

Da Sie auf Frames angewiesen sind, um das Layout einzurichten, sollten Sie eine dedizierte UIView-Unterklasse für Ihre Tabellenansicht Header haben. Sie müssen layoutSubviews-Methode überschreiben, da an dieser Stelle die Header-Ansicht seinen eigenen Rahmen richtig gesetzt hat relative Berechnungen für Unteransichten (einschließlich der Schaltfläche) sind sinnvoll. Hier ein kurzer Beispielcode:

#import <UIKit/UIKit.h> 
@interface MyTableViewHeader : UIView 
@end 

@implementation MyTableViewHeader 

-(instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     //setup button here (omit setting frames) 
    } 
    return self; 
} 

-(void)layoutSubviews 
{ 
    //set the button frame here 
    [super layoutSubviews]; 
} 
@end 

@interface ViewController : UIViewController<UITableViewDelegate> 
@property (nonatomic, strong) MyTableViewHeader *header; 
@end 

@implementation ViewController 
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
//You will probably want some logic here 
//to decide if you want to display the header 
    if (!self.header) { 
     self.header = [MyTableViewHeader new]; 
    } 
    return self.header; 
} 
@end 

Alternativ können Sie auch automatisches Layout für die Tabellenkopfansicht einrichten.

0

fand ich das Problem durch diese

[sendInviteCodeButton.layer setMasksToBounds:YES]; 

setMasksToBounds verursacht aus - wird sind eine Boolesche angibt, ob Subschichten auf die

Grenzen der Schicht abgeschnitten
Verwandte Themen