Как изменить высоту UIPickerView - PullRequest
113 голосов
/ 22 февраля 2009

Можно ли изменить высоту UIPickerView? Некоторые приложения, кажется, имеют более короткие PickerViews, но установка меньшего фрейма не работает, и фрейм заблокирован в Интерфейсном Разработчике.

Ответы [ 28 ]

0 голосов
/ 25 мая 2015

Swift : необходимо добавить подпредставление с клипом к границам

    var DateView = UIView(frame: CGRectMake(0, 0, view.frame.width, 100))
    DateView.layer.borderWidth=1
    DateView.clipsToBounds = true

    var myDatepicker = UIDatePicker(frame:CGRectMake(0,-20,view.frame.width,162));
    DateView.addSubview(myDatepicker);
    self.view.addSubview(DateView)

Это должно добавить ограниченный выбор даты 100 в верхней части контроллера вида.

0 голосов
/ 10 марта 2010

Если вы хотите создать свой сборщик в IB, вы можете изменить его размер до меньшего размера. Убедитесь, что он по-прежнему правильно рисует, поскольку наступает момент, когда он выглядит отвратительно.

0 голосов
/ 11 июля 2015

Мой трюк: используйте слой маски datepicker, чтобы сделать datePicker какой-то частью видимой. как вы видите, так же, как изменить рамку DatePick.

- (void)timeSelect:(UIButton *)timeButton {
UIDatePicker *timePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 550)];
timePicker.backgroundColor = [UIColor whiteColor];
timePicker.layer.mask = [self maskLayerWithDatePicker:timePicker];
timePicker.layer.masksToBounds = YES;
timePicker.datePickerMode = UIDatePickerModeTime;
[self.view addSubview:timePicker];
}

- (CALayer *)maskLayerWithDatePicker:(UIDatePicker *)datePicker {
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, datePicker.width*0.8, datePicker.height*0.8) cornerRadius:10];
shapeLayer.path = path.CGPath;
return shapeLayer;
}
0 голосов
/ 24 ноября 2011

В iOS 5.0 у меня работает следующее:

UIDatePicker *picker = [[UIDatePicker alloc] init];
picker.frame = CGRectMake(0.0, 0.0, 320.0, 160.0);

Это создало средство выбора даты, подобное тому, которое Apple использует в приложении Календарь при создании нового события в ландшафтном режиме. (Высота 3 строки вместо 5.) Это не сработало, когда я установил фрейм в методе initWithFrame:, но до сих пор работает при его установке с использованием отдельного метода.

0 голосов
/ 10 марта 2017

Я использую слой маски, чтобы изменить размер экрана

// swift 3.x
let layer = CALayer()
layer.frame = CGRect(x: 0,y:0, width: displayWidth, height: displayHeight)
layer.backgroundColor = UIColor.red.cgColor
pickerView.layer.mask = layer
0 голосов
/ 10 марта 2012

для iOS 5:

если вы быстро посмотрите на протокол UIPickerView Ссылка

вы найдете

– pickerView:rowHeightForComponent:
– pickerView:widthForComponent:

Я думаю, это первое, что вы ищете

0 голосов
/ 14 февраля 2019

Как уже упоминалось выше, UIPickerView теперь можно изменять. Я просто хочу добавить, что если вы хотите изменить высоту pickerView в ячейке tableView, у меня не получится установить постоянную высоту привязки высоты. Тем не менее, использование lessThanOrEqualToConstant, кажется, работает.

 class PickerViewCell: UITableViewCell {

    let pickerView = UIPickerView()

    func setup() {

        // call this from however you initialize your cell

        self.contentView.addSubview(self.pickerView)
        self.pickerView.translatesAutoresizingMaskIntoConstraints = false

        let constraints: [NSLayoutConstraint] = [
            // pin the pickerView to the contentView's layoutMarginsGuide

            self.pickerView.leadingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.leadingAnchor),
            self.pickerView.topAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.topAnchor),
            self.pickerView.trailingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.trailingAnchor),
            self.pickerView.bottomAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.bottomAnchor),

            // set the height using lessThanOrEqualToConstant
            self.pickerView.heightAnchor.constraint(lessThanOrEqualToConstant: 100)
        ]

        NSLayoutConstraint.activate(constraints)
     }

 }
0 голосов
/ 22 февраля 2009

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

...