Уменьшить маржу контента UIPickerView ios

Модификация из-за первых двух ответов: я хочу изменить не высоту UIPickerview. Я хочу, чтобы содержимое UIPicker начиналось с верхней части UIPicker. Вот пример:

Я хочу удалить поле, показанное на изображении здесь, в приложении. Я хочу, чтобы килограммы находились на верхней границе UIPickerView, а не на средней части

Любая идея?

С панелью инструментов UIPickerView встроен в UIView. Таким образом, иерархия представления: View(родительский)-> Панель инструментов (дочерний), UIPickerView(дочерний)

Представление объявлено как customPicker в моем viewController. Вот код: В viewController.h:

@interface myViewController:UIViewController<UIPickerViewDataSource, UIPickerViewDelegate>

@property (weak, nonatomic) IBoutlet UIView *customPicker;

@end

В viewController.m:

- (void) viewDidLoad{
self.customPicker.frame = CGRectMake(0, CGRectGetMaxY(self.view.frame), CGRectGetWidth(self.customPicker.frame), CGRectGetHeight(self.customPicker.frame));
    [self.view addSubview:self.customPicker];
}

Затем я использую метод setPickerHidden для анимации представления, чтобы показать или скрыть его.

Заранее спасибо за помощь!

4 ответа

Решение

Это невозможно. Если вам нужен "UIPickerView" по-другому, вы можете сделать свой собственный.

Вы не можете изменить высоту UIPickerView. На самом деле, вы можете изменить только ширину подборщика. Больше информации здесь.

Вы можете начать сборщик с определенной строки (например, строки 2 или 3), чтобы поле изначально не отображалось. Однако пользователь все еще может прокрутить его вниз, и когда он достигнет границ содержимого средства выбора, он все равно будет выглядеть как ваш пример выше.

В качестве альтернативы вы можете создать эффект бесконечного представления выбора (хотя на самом деле это просто представление выбора с большим количеством строк).

Смотрите здесь: Как вы делаете компонент UIPickerView обернуть вокруг?

Ответ дан 2021

На данный момент мы можем использовать UIPickerViewDelegate для создания средства выбора без полей.

Пусть средство выбора заполнит контейнер (синяя рамка), затем реализует метод делегата rowHeight и вернет значение, близкое к высоте контейнера. Полный код находится здесь:

      class PickerViewWrapper: UIView, UIPickerViewDataSource, UIPickerViewDelegate {
    
    // Make the return value of this delegate method object close to view height
    func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
        return 60
    }
    
    let customPickerView = UIPickerView()
    let labelTexts = ["Day","Week","Month","Year"]
    
    init() {
        super.init(frame: .zero)
        customPickerView.dataSource = self
        customPickerView.delegate = self
        self.addSubview(customPickerView)
        

        // Let picker fill container view.
        customPickerView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            customPickerView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
            customPickerView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
            customPickerView.topAnchor.constraint(equalTo: self.topAnchor),
            customPickerView.bottomAnchor.constraint(equalTo: self.bottomAnchor)
        ])
    }
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        1
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return labelTexts.count
    }

    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let pickerLabel = UILabel()
        pickerLabel.text = labelTexts[row]
        pickerLabel.sizeToFit()
        return pickerLabel
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
Другие вопросы по тегам