// Path relative to where the php file is or absolute server path
chdir($FilePath); // Comment this out if you are on the same folder
chown($FileName,465); //Insert an Invalid UserId to set to Nobody Owner; for instance 465
$do = unlink($FileName);
if($do=="1"){
echo "The file was deleted successfully.";
} else { echo "There was an error trying to delete the file."; }
Попробуйте это. Надеюсь, что это поможет.
Невозможно установить выравнивание по вертикали для UILabel
, но вы можете получить тот же эффект, изменив рамку метки. Я сделал свои ярлыки оранжевыми, чтобы вы могли ясно видеть, что происходит.
Вот быстрый и простой способ сделать это:
[myLabel sizeToFit];
Если у вас есть ярлык с более длинным текстом, который будет составлять более одной строки, установите ] numberOfLines
до 0
(ноль здесь означает неограниченное количество строк).
myLabel.numberOfLines = 0;
[myLabel sizeToFit];
Расширенная версия
Я сделаю свою метку в коде, чтобы вы могли видеть, что происходит. Вы также можете настроить большую часть этого в Интерфейсном Разработчике. Моя установка - это приложение на основе просмотра с фоновым изображением, которое я сделал в Photoshop, чтобы показать поля (20 точек). Этикетка привлекательного оранжевого цвета, поэтому вы можете видеть, что происходит с размерами.
- (void)viewDidLoad
{
[super viewDidLoad];
// 20 point top and left margin. Sized to leave 20 pt at right.
CGRect labelFrame = CGRectMake(20, 20, 280, 150);
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame];
[myLabel setBackgroundColor:[UIColor orangeColor]];
NSString *labelText = @"I am the very model of a modern Major-General, I've information vegetable, animal, and mineral";
[myLabel setText:labelText];
// Tell the label to use an unlimited number of lines
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];
[self.view addSubview:myLabel];
}
Некоторые ограничения использования sizeToFit
вступают в игру с текстом, выровненным по центру или по правому краю. Вот что происходит:
// myLabel.textAlignment = NSTextAlignmentRight;
myLabel.textAlignment = NSTextAlignmentCenter;
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];
Размер метки остается неизменным с фиксированным левым верхним углом. Вы можете сохранить исходную ширину метки в переменной и установить ее после sizeToFit
или дать ей фиксированную ширину для решения этих проблем:
myLabel.textAlignment = NSTextAlignmentCenter;
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];
CGRect myFrame = myLabel.frame;
// Resize the frame's width to 280 (320 - margins)
// width could also be myOriginalLabelFrame.size.width
myFrame = CGRectMake(myFrame.origin.x, myFrame.origin.y, 280, myFrame.size.height);
myLabel.frame = myFrame;
Обратите внимание, что sizeToFit
будет учитывать исходную ширину метки. минимальная ширина. Если вы начнете с метки шириной 100 и вызовете для нее sizeToFit
, она вернет вам этикетку (возможно, очень высокую) шириной 100 (или немного меньше). Перед изменением размера вы можете установить для метки минимальную ширину.
Еще несколько замечаний:
Соблюдается ли lineBreakMode
, зависит от того, как он установлен. NSLineBreakByTruncatingTail
(по умолчанию) игнорируется после sizeToFit
, как и два других режима усечения (начальный и средний). NSLineBreakByClipping
также игнорируется. NSLineBreakByCharWrapping
работает в обычном режиме. Ширина рамки по-прежнему сужена, чтобы соответствовать крайней правой букве.
Марк Эмери дал исправление для NIB и раскадровки, используя Auto Layout в комментариях:
Если ваша этикетка включена в перо или раскадровку как подвид
представления
ViewController, который использует автоматическое размещение, а затем размещение вашего вызоваsizeToFit
вviewDidLoad
не будет работать, потому что автоматическое размещение размеров и позиций вложенных представлений после вызоваviewDidLoad
немедленно отменяет эффекты вашего вызоваsizeToFit
. Однако вызовsizeToFit
изviewDidLayoutSubviews
будет работать .
Здесь используется NSString
метод sizeWithFont: constrainedToSize: lineBreakMode:
для вычисления высоты фрейма, необходимой для размещения строки, затем устанавливает исходную точку и ширину.
Измените размер фрейма для метки, используя текст, который вы хотите вставить. Таким образом, вы можете разместить любое количество строк.
CGSize maximumSize = CGSizeMake(300, 9999);
NSString *dateString = @"The date today is January 1st, 1999";
UIFont *dateFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize dateStringSize = [dateString sizeWithFont:dateFont
constrainedToSize:maximumSize
lineBreakMode:self.dateLabel.lineBreakMode];
CGRect dateFrame = CGRectMake(10, 10, 300, dateStringSize.height);
self.dateLabel.frame = dateFrame;
Как и ответ выше, но он был не совсем верным или его легко было вставить в код, поэтому я немного его почистил. Добавьте это расширение либо в его собственные файлы .h и .m, либо просто вставьте прямо над реализацией, которую вы собираетесь использовать:
#pragma mark VerticalAlign
@interface UILabel (VerticalAlign)
- (void)alignTop;
- (void)alignBottom;
@end
@implementation UILabel (VerticalAlign)
- (void)alignTop
{
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width; //expected width of label
CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height;
for(int i=0; i<= newLinesToPad; i++)
{
self.text = [self.text stringByAppendingString:@" \n"];
}
}
- (void)alignBottom
{
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width; //expected width of label
CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height;
for(int i=0; i< newLinesToPad; i++)
{
self.text = [NSString stringWithFormat:@" \n%@",self.text];
}
}
@end
А затем, чтобы использовать, поместите свой текст в метку, а затем вызовите соответствующий метод для его выравнивания :
[myLabel alignTop];
или
[myLabel alignBottom];
Еще более быстрый (и грязный) способ сделать это - установить для режима разрыва строки UILabel значение «Обрезать» и добавить фиксированное количество новых строк.
myLabel.lineBreakMode = UILineBreakModeClip;
myLabel.text = [displayString stringByAppendingString:"\n\n\n\n"];
Это решение не сработает для всех - в частности, если вы по-прежнему хотите отображать "..." в конце строки, если оно превышает количество строк, которые вы показываете, вам необходимо используйте один из более длинных фрагментов кода - но во многих случаях это даст вам то, что вам нужно.
Установите новый текст:
myLabel.text = @"Some Text"
Установите максимальное количество
строк равным 0 (автоматически):
myLabel.numberOfLines = 0
Установите максимальный размер рамки этикетки:
myLabel.frame = CGRectMake(20,20,200,800)
Вызовите sizeToFit
, чтобы уменьшить размер кадра, чтобы содержимое поместилось:
[myLabel sizeToFit]
Рамка меток теперь достаточно высока и широка, чтобы вместить текст. Верхний левый должен быть без изменений. Я проверил это только с текстом, выровненным по верхнему левому краю. Для других выравниваний вам, возможно, придется впоследствии изменить рамку.
Кроме того, для моей метки включен перенос слов.
Я немного почитал код, а также код на введенной странице, и обнаружил, что все они пытаются изменить размер кадра метки, чтобы не появлялось выравнивание по вертикали по центру по умолчанию.
Однако, в некоторых случаях мы хотим, чтобы метка занимала все эти места, даже если в метке так много текста (например, несколько строк с одинаковой высотой).
Здесь я использовал альтернативный способ решения этой проблемы, просто подставляя новые строки в конец метки (pls заметьте, что на самом деле я унаследовал UILabel
, но в этом нет необходимости):
CGSize fontSize = [self.text sizeWithFont:self.font];
finalHeight = fontSize.height * self.numberOfLines;
finalWidth = size.width; //expected width of label
CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height;
for(int i = 0; i < newLinesToPad; i++)
{
self.text = [self.text stringByAppendingString:@"\n "];
}
В SwiftUI, все представления обычно sizeToFit их содержание, но если Вы явно используете frame
модификатор, можно использовать alignment
параметр кадра:
Text("Text")
.background(Color.red)
.frame(width: 100, height: 200, alignment: .top)
Также, если Вы используете какой-либо вид Stack
для расположения представлений, у всех них есть параметр, подобный кадру, названному alignment
:
ZStack(alignment: .top) {
Color.red
Text("Text")
.background(Color.red)
}