iOS - UIViewController как всплывающее окно с динамической высотой - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть всплывающее окно, которое содержит две метки, табличное представление и кнопку.Я создал ViewController, как в Отображение UIViewController как всплывающего в iPhone описано.

Мое специальное требование сейчас состоит в том, что просмотр таблицы не обязателен во всех случаях, поэтому я попытался скрыть его и ожидал уменьшения высоты всплывающего окна.Но я всегда получаю одинаковый рост.Я также попытался использовать UIStackView, но высота вида не изменилась в случае сокрытия вида таблицы.

Мне также нужно иметь вид в центре дисплея в обоих случаях высоты.

введите описание изображения здесь

@interface AuthorizationMessageViewController ()

@property (weak, nonatomic) IBOutlet UIView *messageView;
@property (weak, nonatomic) IBOutlet UILabel *titelLabel;
@property (weak, nonatomic) IBOutlet UILabel *detailsLabel;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet UIButton *okButton;
- (IBAction)okButtonTouchUp:(id)sender;
@end

@implementation AuthorizationMessageViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.messageView.layer.cornerRadius = 5;
    self.messageView.layer.masksToBounds = YES;
    self.messageView.backgroundColor = COLOR_BACKGROUND_WHITE;
    self.messageView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
    self.tableView.separatorColor = [UIColor clearColor];
    self.tableView.backgroundColor = COLOR_BACKGROUND_WHITE;

    self.titelLabel.text = WHLocalizedString(@"EventHeaderAuthorization", nil);

    [self setupView];
}

- (void)setupView
{
    NSString *ns_messageText;

    ns_messageText = @"test";

    if (YES)
    {
        ns_messageText = @"Hide"
        [self.tableView setHidden:YES];
    }
    else
    {
        ns_messageText = @"No Hide"
        [self.tableView setHidden:NO];
    }

    self.detailsLabel.text = ns_messageText;
    self.detailsLabel.textColor = COLOR_TEXT_GREY_KEY;
    self.detailsLabel.numberOfLines = 0;
    [self.detailsLabel sizeToFit];
}

#pragma mark - Table view data source

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 7;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 21;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"testCell"];

    UILabel *weekDayLabel = (UILabel *)[cell viewWithTag:10];
    weekDayLabel.text = @"weekday";
    weekDayLabel.textColor = COLOR_TEXT_GREY_KEY;
    weekDayLabel.font = FONT_LIGHT_SIZE_15;

    UILabel *testLabel = (UILabel *)[cell viewWithTag:11];
    testLabel = @"testLabel"
    testLabel = COLOR_TEXT_GREY_KEY;
    testLabel = FONT_LIGHT_SIZE_15;

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

    return cell;
}

Я надеюсь, что у кого-то есть решение или идея для этого.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Представьте себе следующий пользовательский интерфейс

enter image description here

по центру UIView, который содержит UIButton и UITableView, вам нужно перехватить ограничение высоты таблицы и сделать это внутри всплывающего окна, если вы хотите скрыть его

@IBOutlet weak var heightTblCon:NSLayoutConstraint!

//

self.heightTblCon.constant = show ? 300 : 0
self.view.layoutIfNeeded()

Кстати, я изменил цвет фона для пояснения, который должен быть прозрачным для модальных

0 голосов
/ 17 сентября 2018

Попробуйте отрегулировать высоту вашего обзора с помощью NSLayoutConstraint.Создайте такой же выход и управляйте высотой программно.Например:

 myConstraintOutlet.constant = 10
 myTableView.layoutIfNeeded()

Здесь - ссылка для дальнейшего помощника.

Что касается вашего второго запроса, чтобы всплывающее окно всегда было в центре, вы можете сделать это, используя Autolayout, или программно определить центр вашего всплывающего окна.

 myView.center = CGPoint(x: superView.center.x, y: superView.center.y)

Надеюсь, это поможет.

0 голосов
/ 17 сентября 2018

Попробуйте вызвать sizeToFit() во всплывающем окне после скрытия tableView:

popupView.sizeToFit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...