Arhn - архитектура программирования

Динамическая высота виджета сегодня — iOS

Я работаю над приложением, которое использует сегодняшний виджет, где мне нужно показать табличное представление почти с 50 строками, но экран подходит только для 10 строк. Поэтому мне нужно увеличить высоту виджета в соответствии с высотой моей таблицы. я провел много исследований по этому вопросу, которые говорят, что я не могу этого сделать. Я видел приложение Yahoo Stocks, в котором есть функция «показать все», чтобы отображать все акции на виджете с высотой, превышающей высоту экрана. Если что-то где-то делается, почему я не могу этого сделать? Я пытался установить высоту моей высоты просмотра TodayViewController обоими способами, используя автомакет, установив «preferredContentSize». Я действительно хотел знать, делаю ли я что-то неправильно, или невозможно иметь высоту виджета больше, чем экран высота. Любое предложение приветствуется. Вот мой код Todayviewcontroller.m

-(void)adjustWidgetHeight {
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.view
                                                                    attribute:NSLayoutAttributeHeight
                                                                    relatedBy:0
                                                                       toItem:nil
                                                                    attribute:NSLayoutAttributeNotAnAttribute
                                                                   multiplier:1
                                                                     constant:2140];
heightConstraint.priority = 999;

[self.view addConstraint:heightConstraint];
[self.view needsUpdateConstraints];
[self.view setNeedsLayout];

}


Ответы:


1

Высота может динамически изменяться, но я думаю, что невозможно достичь высоты над экраном.

стандартное приложение является предустановленным приложением, так что, возможно, это можно сделать.

после того, как я проверил демонстрационный код своего виджета (я провожу некоторые исследования о том, как создать виджет по кодам), я думаю, что это невозможно сделать.

система добавит принудительное ограничение высоты, которое точно соответствует панели виджетов (в Iphone 5 и 5S это около 441), даже если я вручную установил высоту 3000, она все равно ограничена 441.

вы можете проверить демо GIF:

test

это мой код для теста (я использую Masonry для авторазметки)

//
//  TodayViewController.m
//  widget
//
//  Created by Ralph Li on 4/29/15.
//  Copyright (c) 2015 LJC. All rights reserved.
//

#import "TodayViewController.h"
#import <NotificationCenter/NotificationCenter.h>
#import <Masonry/Masonry.h>

@interface TodayViewController () <NCWidgetProviding>

@property (strong, nonatomic) UIView *contentView;
@property (nonatomic, strong) UIButton *btnTest;

@end

@implementation TodayViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.contentView = [UIView new];
    self.contentView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.contentView];

    [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
        make.height.mas_equalTo(200).priorityHigh();
    }];

    self.btnTest = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.btnTest setTitle:[[NSDate date] description] forState:UIControlStateNormal];
    self.btnTest.backgroundColor = [UIColor redColor];
    [self.btnTest addTarget:self action:@selector(actionTest) forControlEvents:UIControlEventTouchUpInside];

    [self.contentView addSubview:self.btnTest];

    [self.btnTest mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.contentView);
        make.size.mas_equalTo(CGSizeMake(300, 40));
    }];
}

- (void) actionTest
{
    [self.contentView mas_updateConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(@(self.contentView.frame.size.height>250?200:3000)).priorityHigh();
    }];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
    // Perform any setup necessary in order to update the view.

    // If an error is encountered, use NCUpdateResultFailed
    // If there's no update required, use NCUpdateResultNoData
    // If there's an update, use NCUpdateResultNewData

    completionHandler(NCUpdateResultNewData);
}

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
    return UIEdgeInsetsZero;
}

@end
29.04.2015
  • Спасибо, Адали. Я тоже могу динамически изменять высоту, но не больше, чем размер экрана. Я очень ценю ваши усилия. 29.04.2015
  • Я искал widgetPerformUpdateWithCompletionHandler , спасибо 30.08.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..