今天的小部件高度动态 - iOS

时间:2015-04-29 03:58:12

标签: ios iphone ios8-today-widget

我正在开发一个使用今天小部件的应用程序,我需要显示一些近50行的表视图。但是屏幕只适合10行。所以我需要增加高度根据我的桌子高度小部件。我已经做了很多研究,说我无法完成。我已经看过雅虎股票应用程序,其中有#34;显示所有&#34 34;功能显示小部件上的所有股票,其高度超过屏幕高度。如果在某处做某事我为什么不能这样做?我尝试使用autolayout,设置" preferredContentSize"来设置todayviewcontroller视图高度的高度。我真的想知道我是否在某处做错了,或者它是不可能有小于屏幕高度的小部件高度。任何建议表示赞赏。 这是我的代码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 个答案:

答案 0 :(得分:2)

高度可以动态改变,但我认为不可能达到超屏高度。

股票应用程序是一个预设的应用程序,所以也许可以做到。

在我检查了我的小部件演示代码后(我做了一些关于如何通过代码创建小部件的研究),我认为无法完成。

系统将添加一个精确的力量约束,精确地指望小部件面板(在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