2013-12-18 3 views
8

Мне нужно UIProgressView как часть ячейки UITableView для одного приложения iOS 7. Я добавил UIProgressView из кода на правой стороне ячейки, как это:UIProgressView, отображающий проблемы в iOS 7

_progressBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; 
_progressBar.translatesAutoresizingMaskIntoConstraints = NO; 
[self.contentView addSubview:_progressBar]; 

[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]]; 
[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-10.0]]; 
[_progressBar addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:60.0]]; 
[_progressBar addConstraint:[NSLayoutConstraint constraintWithItem:_progressBar attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:12.0]]; 

Однако отображение UIProgressView немного странно. Когда прогресс равен нулю, объект UIProgressView выглядит следующим образом:

enter image description here

Когда я установил значение прогресса 0.5, UIProgressView становится прямоугольник слева и остается закругленный прямоугольник справа:

enter image description here

И когда я установил прогресс в 0.98, выглядит следующим образом:

enter image description here

Любая идея, как заполнить UIProgressView, просто устанавливая значение прогресса и ту форму прямоугольника (или прямоугольника) округленного прямоугольника, сохраняются все время? Или это невозможно без добавления пользовательской графики или переопределения UIProgressView?

Большое спасибо заранее и с наилучшими пожеланиями.

+0

Я думаю, что высота UIProgressView исправлена. –

+0

высота прогресса может быть изменена, и было бы лучше сделать это, используя CGAffineTransform – Ilario

ответ

19

Если бы та же проблема сегодня и исправить это не так сложно :)

В интерфейсе строитель добавить UIView с точно такой же размер, что и UIProgressView. Добавьте UIProgressView в новый UIView.

Выполните следующие действия для UIView, если вы хотите углы:

1) Установите cornerradius на половине высоты (например, 30px высота прогрессбар означает 15px угловой радиус UIView))

myView.layer.cornerRadius = 15; 

2) Набор маска границ

myView.layer.masksToBounds = TRUE; 

3) Установить клип границ таким образом ничто не может выйти из UIView

myView.clipsToBounds = TRUE; 

И теперь у вас есть закругленный UIProgressBar с необходимой высотой.

Если вы не хотите, чтобы закругленные углы просто добавляли UIView так же, но только изменяли цвет фона до того же самого серого, что и гусеница UIProgressbar.

Goodluck!

-Sjoerd

+0

еще проще: изменить фон 'UIView' на' clearColor' – dehlen

+1

не являются 'clipToBounds' и' masksToBounds' одинаковыми? http://stackoverflow.com/questions/1177775/how-is-the-relation-between-uiviews-clipstobounds-and-calayers-maskstobounds –

5

На будущее: Я решил эту проблему, установив радиус угла как

_progressView.layer.cornerRadius = 2.0; 

И потом:

_progressView.clipsToBounds = YES; 

Нет необходимости для контейнера для UIProgressView.