Измерение пиксельной ширины строки

Я столкнулся с несколькими петлями в реализации решения John Resig. Вот модифицированная функция, которую я использовал на основе его ответа:

function parseTime(timeString)
{
  if (timeString == '') return null;
  var d = new Date();
  var time = timeString.match(/(\d+)(:(\d\d))?\s*(p?)/);
  d.setHours( parseInt(time[1]) + ( ( parseInt(time[1]) < 12 && time[4] ) ? 12 : 0) );
  d.setMinutes( parseInt(time[3]) || 0 );
  d.setSeconds(0, 0);
  return d;
} // parseTime()

var tests = [
  '1:00 pm','1:00 p.m.','1:00 p','1:00pm','1:00p.m.','1:00p','1 pm',
  '1 p.m.','1 p','1pm','1p.m.', '1p', '13:00','13', '1a', '12', '12a', '12p', '12am', '12pm', '2400am', '2400pm', '2400', 
  '1000', '100', '123', '2459', '2359', '2359am', '1100', '123p',
  '1234', '1', '9', '99', '999', '9999', '99999', '0000', '0011', '-1', 'mioaw' ];

for ( var i = 0; i < tests.length; i++ ) {
  console.log( tests[i].padStart( 9, ' ' ) + " = " + parseTime(tests[i]) );
}
16
задан Josh Caswell 11 June 2013 в 23:01
поделиться

2 ответа

В iPhone OS это немного отличается, вместо этого посмотрите NSString UIKit Additions Reference . Идея та же, что и в Cocoa для Mac OS X, но есть больше методов.

Для одиночных строк текста используйте:

- (CGSize)sizeWithFont:(UIFont *)font 
              forWidth:(CGFloat)width 
         lineBreakMode:(UILineBreakMode)lineBreakMode

И для многострочных текстов используйте:

- (CGSize)sizeWithFont:(UIFont *)font 
     constrainedToSize:(CGSize)size 
         lineBreakMode:(UILineBreakMode)lineBreakMode

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

27
ответ дан 30 November 2019 в 17:28
поделиться

Взгляните на Справочник по дополнениям набора приложений NSString , в частности boundingRectWithSize: options: attributes: . Значение, возвращаемое этой подпрограммой, должно дать вам ширину вашего NSString .

5
ответ дан 30 November 2019 в 17:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: