Mô phỏng hành vi phù hợp với khía cạnh bằng cách sử dụng các ràng buộc Tự động thanh toán trong Xcode 6

338
chris838 2014-09-11 03:28.

Tôi muốn sử dụng AutoLayout để định kích thước và bố cục chế độ xem theo cách gợi nhớ đến chế độ nội dung phù hợp với khía cạnh của UIImageView.

Tôi có một chế độ xem phụ bên trong chế độ xem vùng chứa trong Trình tạo giao diện. Chế độ xem phụ có một số tỷ lệ khung hình cố hữu mà tôi muốn tôn trọng. Kích thước của chế độ xem vùng chứa là không xác định cho đến thời gian chạy.

Nếu tỷ lệ co của chế độ xem vùng chứa rộng hơn chế độ xem phụ, thì tôi muốn chiều cao của chế độ xem phụ bằng với chiều cao của chế độ xem chính.

Nếu tỷ lệ co của chế độ xem vùng chứa cao hơn chế độ xem phụ, thì tôi muốn chiều rộng của chế độ xem phụ bằng chiều rộng của chế độ xem chính.

Trong cả hai trường hợp, tôi muốn chế độ xem phụ được căn giữa theo chiều ngang và chiều dọc trong chế độ xem vùng chứa.

Có cách nào để đạt được điều này bằng cách sử dụng các ràng buộc Tự động thanh toán trong Xcode 6 hoặc trong phiên bản trước đó không? Lý tưởng nhất là sử dụng Trình tạo giao diện, nhưng nếu không, có thể xác định các ràng buộc như vậy theo chương trình.

8 answers

1053
rob mayoff 2014-09-11 05:03.

Bạn không mô tả tỷ lệ để phù hợp; bạn đang mô tả phù hợp với khía cạnh. (Tôi đã chỉnh sửa câu hỏi của bạn về vấn đề này.) Chế độ xem phụ trở nên lớn nhất có thể trong khi vẫn duy trì tỷ lệ co và vừa vặn hoàn toàn bên trong chế độ xem chính của nó.

Dù sao, bạn có thể làm điều này với bố cục tự động. Bạn có thể thực hiện hoàn toàn bằng IB kể từ Xcode 5.1. Hãy bắt đầu với một số quan điểm:

Chế độ xem màu xanh lục nhạt có tỷ lệ khung hình là 4: 1. Chế độ xem màu xanh lục đậm có tỷ lệ khung hình là 1: 4. Tôi sẽ thiết lập các ràng buộc để chế độ xem màu xanh lam lấp đầy nửa trên của màn hình, chế độ xem màu hồng lấp đầy nửa dưới của màn hình và mỗi chế độ xem màu xanh lá cây sẽ mở rộng hết mức có thể trong khi vẫn duy trì tỷ lệ co và vừa vặn thùng đựng hàng.

Đầu tiên, tôi sẽ tạo các ràng buộc trên cả bốn mặt của khung nhìn màu xanh lam. Tôi sẽ ghim nó vào người hàng xóm gần nhất của nó trên mỗi cạnh, với khoảng cách là 0. Tôi đảm bảo tắt lề:

Lưu ý rằng tôi chưa cập nhật khung. Tôi thấy dễ dàng hơn để chừa khoảng trống giữa các khung nhìn khi thiết lập các ràng buộc và chỉ cần đặt các hằng số thành 0 (hoặc bất cứ thứ gì) bằng tay.

Tiếp theo, tôi ghim các cạnh trái, dưới và phải của khung nhìn màu hồng vào người hàng xóm gần nhất của nó. Tôi không cần thiết lập ràng buộc cạnh trên vì cạnh trên của nó đã được ràng buộc với cạnh dưới của chế độ xem màu xanh lam.

Tôi cũng cần giới hạn chiều cao bằng nhau giữa các khung nhìn màu hồng và xanh lam. Điều này sẽ làm cho chúng lấp đầy một nửa màn hình:

Nếu tôi yêu cầu Xcode cập nhật tất cả các khung ngay bây giờ, tôi nhận được điều này:

Vì vậy, các ràng buộc tôi đã thiết lập cho đến nay là chính xác. Tôi hoàn tác điều đó và bắt đầu công việc trên chế độ xem màu xanh lục nhạt.

Việc chỉnh góc độ cho chế độ xem màu xanh lục nhạt yêu cầu năm hạn chế:

  • Ràng buộc tỷ lệ khung hình ưu tiên bắt buộc trên chế độ xem màu xanh lục nhạt. Bạn có thể tạo ràng buộc này trong xib hoặc bảng phân cảnh với Xcode 5.1 trở lên.
  • Ràng buộc mức độ ưu tiên bắt buộc giới hạn chiều rộng của chế độ xem màu xanh lục nhạt nhỏ hơn hoặc bằng chiều rộng của vùng chứa của nó.
  • Ràng buộc mức độ ưu tiên cao đặt chiều rộng của chế độ xem màu xanh lục nhạt bằng chiều rộng của vùng chứa của nó.
  • Ràng buộc ưu tiên bắt buộc giới hạn chiều cao của chế độ xem màu xanh lục nhạt nhỏ hơn hoặc bằng chiều cao của vùng chứa của nó.
  • Ràng buộc mức độ ưu tiên cao đặt chiều cao của chế độ xem màu xanh lục nhạt bằng chiều cao của vùng chứa của nó.

Hãy xem xét hai ràng buộc chiều rộng. Bản thân ràng buộc nhỏ hơn hoặc bằng không đủ để xác định chiều rộng của khung nhìn màu xanh lục nhạt; nhiều chiều rộng sẽ phù hợp với ràng buộc. Vì có sự không rõ ràng, autolayout sẽ cố gắng chọn một giải pháp giảm thiểu lỗi trong ràng buộc khác (mức độ ưu tiên cao nhưng không bắt buộc). Giảm thiểu lỗi có nghĩa là làm cho chiều rộng càng gần với chiều rộng của vùng chứa càng tốt, đồng thời không vi phạm ràng buộc nhỏ hơn hoặc bằng được yêu cầu.

Điều tương tự cũng xảy ra với giới hạn chiều cao. Và vì ràng buộc tỷ lệ khung hình cũng là bắt buộc, nên nó chỉ có thể tối đa hóa kích thước của chế độ xem phụ dọc theo một trục (trừ khi vùng chứa có cùng tỷ lệ cỡ ảnh với chế độ xem phụ).

Vì vậy, trước tiên tôi tạo ràng buộc tỷ lệ khung hình:

Sau đó, tôi tạo các ràng buộc chiều rộng và chiều cao bằng nhau với vùng chứa:

Tôi cần chỉnh sửa các ràng buộc này thành các ràng buộc nhỏ hơn hoặc bằng:

Tiếp theo, tôi cần tạo một tập hợp các ràng buộc chiều rộng và chiều cao bằng nhau với vùng chứa:

Và tôi cần đặt những ràng buộc mới này ít hơn mức ưu tiên bắt buộc:

Cuối cùng, bạn đã yêu cầu chế độ xem phụ được đặt ở giữa trong vùng chứa của nó, vì vậy tôi sẽ thiết lập các ràng buộc đó:

Bây giờ, để kiểm tra, tôi sẽ chọn bộ điều khiển chế độ xem và yêu cầu Xcode cập nhật tất cả các khung. Đây là những gì tôi nhận được:

Giáo sư! Chế độ xem phụ đã mở rộng để lấp đầy hoàn toàn vùng chứa của nó. Nếu tôi chọn nó, tôi có thể thấy rằng trên thực tế, nó vẫn duy trì tỷ lệ khung hình, nhưng nó đang thực hiện một khía cạnh lấp đầy thay vì một khía cạnh vừa vặn .

Vấn đề là trên một ràng buộc nhỏ hơn hoặc bằng, quan trọng là chế độ xem nào ở mỗi đầu của ràng buộc và Xcode đã thiết lập ràng buộc ngược lại với mong đợi của tôi. Tôi có thể chọn mỗi một trong hai ràng buộc và đảo ngược các mục đầu tiên và thứ hai của nó. Thay vào đó, tôi sẽ chỉ chọn chế độ xem phụ và thay đổi các ràng buộc thành lớn hơn hoặc bằng:

Xcode cập nhật bố cục:

Bây giờ tôi làm tất cả những điều tương tự với chế độ xem màu xanh lá cây đậm ở phía dưới. Tôi cần đảm bảo tỷ lệ khung hình của nó là 1: 4 (Xcode đã thay đổi kích thước của nó theo một cách kỳ lạ vì nó không có ràng buộc). Tôi sẽ không hiển thị lại các bước vì chúng giống nhau. Đây là kết quả:

Bây giờ tôi có thể chạy nó trong trình mô phỏng iPhone 4S, có kích thước màn hình khác với IB được sử dụng và kiểm tra xoay:

Và tôi có thể kiểm tra trong trình mô phỏng iPhone 6:

Tôi đã tải bảng phân cảnh cuối cùng của mình lên ý chính này để bạn tiện theo dõi.

24
Johannes Fahrenkrug 2014-09-27 08:45.

Rob, câu trả lời của bạn thật tuyệt vời! Tôi cũng biết rằng câu hỏi này đặc biệt là về việc đạt được điều này bằng cách sử dụng bố cục tự động. Tuy nhiên, chỉ là một tài liệu tham khảo, tôi muốn chỉ ra cách điều này có thể được thực hiện trong mã. Bạn thiết lập chế độ xem trên và dưới (xanh lam và hồng) giống như Rob đã hiển thị. Sau đó, bạn tạo một tùy chỉnh AspectFitView:

AspectFitView.h :

#import <UIKit/UIKit.h>

@interface AspectFitView : UIView

@property (nonatomic, strong) UIView *childView;

@end

AspectFitView.m :

#import "AspectFitView.h"

@implementation AspectFitView

- (void)setChildView:(UIView *)childView
{
    if (_childView) {
        [_childView removeFromSuperview];
    }

    _childView = childView;

    [self addSubview:childView];
    [self setNeedsLayout];
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    if (_childView) {
        CGSize childSize = _childView.frame.size;
        CGSize parentSize = self.frame.size;
        CGFloat aspectRatioForHeight = childSize.width / childSize.height;
        CGFloat aspectRatioForWidth = childSize.height / childSize.width;

        if ((parentSize.height * aspectRatioForHeight) > parentSize.height) {
            // whole height, adjust width
            CGFloat width = parentSize.width * aspectRatioForWidth;
            _childView.frame = CGRectMake((parentSize.width - width) / 2.0, 0, width, parentSize.height);
        } else {
            // whole width, adjust height
            CGFloat height = parentSize.height * aspectRatioForHeight;
            _childView.frame = CGRectMake(0, (parentSize.height - height) / 2.0, parentSize.width, height);
        }
    }
}

@end

Tiếp theo, bạn thay đổi lớp của chế độ xem màu xanh lam và màu hồng trong bảng phân cảnh thành AspectFitViews. Cuối cùng, bạn đặt hai cửa hàng để viewController của bạn topAspectFitViewbottomAspectFitViewvà thiết lập của họ childViews ở viewDidLoad:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *top = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 500, 100)];
    top.backgroundColor = [UIColor lightGrayColor];

    UIView *bottom = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 500)];
    bottom.backgroundColor = [UIColor greenColor];

    _topAspectFitView.childView = top;
    _bottomAspectFitView.childView = bottom;
}

Vì vậy, không khó để làm điều này trong mã và nó vẫn rất dễ thích nghi và hoạt động với các chế độ xem có kích thước thay đổi và tỷ lệ khung hình khác nhau.

Cập nhật tháng 7 năm 2015 : Tìm ứng dụng demo tại đây: https://github.com/jfahrenkrug/SPWKAspectFitView

8
Tomasz Bąk 2015-01-15 03:05.

Tôi cần một giải pháp từ câu trả lời được chấp nhận, nhưng được thực thi từ mã. Cách thanh lịch nhất mà tôi đã tìm thấy là sử dụng Masonry framework .

#import "Masonry.h"

...

[view mas_makeConstraints:^(MASConstraintMaker *make) {
    make.width.equalTo(view.mas_height).multipliedBy(aspectRatio);
    make.size.lessThanOrEqualTo(superview);
    make.size.equalTo(superview).with.priorityHigh();
    make.center.equalTo(superview);
}];
8
brianLikeApple 2016-11-23 05:53.

Điều này dành cho macOS.

Tôi gặp vấn đề khi sử dụng cách của Rob để đạt được sự phù hợp về khía cạnh trên ứng dụng OS X. Nhưng tôi đã thực hiện nó bằng một cách khác - Thay vì sử dụng chiều rộng và chiều cao, tôi sử dụng khoảng trống ở đầu, cuối, trên và dưới.

Về cơ bản, hãy thêm hai dấu cách ở đầu trong đó một khoảng trống có mức độ ưu tiên bắt buộc> = 0 @ 1000 và một dấu cách khác có mức độ ưu tiên thấp = 0 @ 250. Thực hiện các cài đặt tương tự cho dấu cách ở cuối, trên và dưới.

Tất nhiên, bạn cần đặt tỷ lệ khung hình và tâm X và tâm Y.

Và sau đó công việc đã hoàn thành!

5
Gregor 2015-05-31 17:37.

Tôi thấy mình muốn có hành vi lấp đầy khía cạnh để UIImageView sẽ duy trì tỷ lệ khung hình của riêng nó và lấp đầy hoàn toàn chế độ xem vùng chứa. Thật khó hiểu, UIImageView của tôi đã phá vỡ CẢ HAI ràng buộc chiều rộng bằng nhau và chiều cao bằng nhau có mức độ ưu tiên cao (được mô tả trong câu trả lời của Rob) và hiển thị ở độ phân giải đầy đủ.

Giải pháp chỉ đơn giản là đặt Mức độ ưu tiên kháng nén nội dung của UIImageView thấp hơn mức độ ưu tiên của các ràng buộc chiều rộng bằng nhau và chiều cao bằng nhau:

2
Larry OBrien 2016-02-20 14:00.

Đây là một câu trả lời tuyệt vời của @ rob_mayoff cho cách tiếp cận lấy mã làm trung tâm, sử dụng NSLayoutAnchorcác đối tượng và được chuyển sang Xamarin. Đối với tôi, NSLayoutAnchorvà các lớp liên quan đã làm cho AutoLayout dễ dàng lập trình hơn nhiều:

public class ContentView : UIView
{
        public ContentView (UIColor fillColor)
        {
            BackgroundColor = fillColor;
        }
}

public class MyController : UIViewController 
{
    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        //Starting point:
        var view = new ContentView (UIColor.White);

        blueView = new ContentView (UIColor.FromRGB (166, 200, 255));
        view.AddSubview (blueView);

        lightGreenView = new ContentView (UIColor.FromRGB (200, 255, 220));
        lightGreenView.Frame = new CGRect (20, 40, 200, 60);

        view.AddSubview (lightGreenView);

        pinkView = new ContentView (UIColor.FromRGB (255, 204, 240));
        view.AddSubview (pinkView);

        greenView = new ContentView (UIColor.Green);
        greenView.Frame = new CGRect (80, 20, 40, 200);
        pinkView.AddSubview (greenView);

        //Now start doing in code the things that @rob_mayoff did in IB

        //Make the blue view size up to its parent, but half the height
        blueView.TranslatesAutoresizingMaskIntoConstraints = false;
        var blueConstraints = new []
        {
            blueView.LeadingAnchor.ConstraintEqualTo(view.LayoutMarginsGuide.LeadingAnchor),
            blueView.TrailingAnchor.ConstraintEqualTo(view.LayoutMarginsGuide.TrailingAnchor),
            blueView.TopAnchor.ConstraintEqualTo(view.LayoutMarginsGuide.TopAnchor),
            blueView.HeightAnchor.ConstraintEqualTo(view.LayoutMarginsGuide.HeightAnchor, (nfloat) 0.5)
        };
        NSLayoutConstraint.ActivateConstraints (blueConstraints);

        //Make the pink view same size as blue view, and linked to bottom of blue view
        pinkView.TranslatesAutoresizingMaskIntoConstraints = false;
        var pinkConstraints = new []
        {
            pinkView.LeadingAnchor.ConstraintEqualTo(blueView.LeadingAnchor),
            pinkView.TrailingAnchor.ConstraintEqualTo(blueView.TrailingAnchor),
            pinkView.HeightAnchor.ConstraintEqualTo(blueView.HeightAnchor),
            pinkView.TopAnchor.ConstraintEqualTo(blueView.BottomAnchor)
        };
        NSLayoutConstraint.ActivateConstraints (pinkConstraints);


        //From here, address the aspect-fitting challenge:

        lightGreenView.TranslatesAutoresizingMaskIntoConstraints = false;
        //These are the must-fulfill constraints: 
        var lightGreenConstraints = new []
        {
            //Aspect ratio of 1 : 5
            NSLayoutConstraint.Create(lightGreenView, NSLayoutAttribute.Height, NSLayoutRelation.Equal, lightGreenView, NSLayoutAttribute.Width, (nfloat) 0.20, 0),
            //Cannot be larger than parent's width or height
            lightGreenView.WidthAnchor.ConstraintLessThanOrEqualTo(blueView.WidthAnchor),
            lightGreenView.HeightAnchor.ConstraintLessThanOrEqualTo(blueView.HeightAnchor),
            //Center in parent
            lightGreenView.CenterYAnchor.ConstraintEqualTo(blueView.CenterYAnchor),
            lightGreenView.CenterXAnchor.ConstraintEqualTo(blueView.CenterXAnchor)
        };
        //Must-fulfill
        foreach (var c in lightGreenConstraints) 
        {
            c.Priority = 1000;
        }
        NSLayoutConstraint.ActivateConstraints (lightGreenConstraints);

        //Low priority constraint to attempt to fill parent as much as possible (but lower priority than previous)
        var lightGreenLowPriorityConstraints = new []
         {
            lightGreenView.WidthAnchor.ConstraintEqualTo(blueView.WidthAnchor),
            lightGreenView.HeightAnchor.ConstraintEqualTo(blueView.HeightAnchor)
        };
        //Lower priority
        foreach (var c in lightGreenLowPriorityConstraints) 
        {
            c.Priority = 750;
        }

        NSLayoutConstraint.ActivateConstraints (lightGreenLowPriorityConstraints);

        //Aspect-fit on the green view now
        greenView.TranslatesAutoresizingMaskIntoConstraints = false;
        var greenConstraints = new []
        {
            //Aspect ratio of 5:1
            NSLayoutConstraint.Create(greenView, NSLayoutAttribute.Height, NSLayoutRelation.Equal, greenView, NSLayoutAttribute.Width, (nfloat) 5.0, 0),
            //Cannot be larger than parent's width or height
            greenView.WidthAnchor.ConstraintLessThanOrEqualTo(pinkView.WidthAnchor),
            greenView.HeightAnchor.ConstraintLessThanOrEqualTo(pinkView.HeightAnchor),
            //Center in parent
            greenView.CenterXAnchor.ConstraintEqualTo(pinkView.CenterXAnchor),
            greenView.CenterYAnchor.ConstraintEqualTo(pinkView.CenterYAnchor)
        };
        //Must fulfill
        foreach (var c in greenConstraints) 
        {
            c.Priority = 1000;
        }
        NSLayoutConstraint.ActivateConstraints (greenConstraints);

        //Low priority constraint to attempt to fill parent as much as possible (but lower priority than previous)
        var greenLowPriorityConstraints = new []
        {
            greenView.WidthAnchor.ConstraintEqualTo(pinkView.WidthAnchor),
            greenView.HeightAnchor.ConstraintEqualTo(pinkView.HeightAnchor)
        };
        //Lower-priority than above
        foreach (var c in greenLowPriorityConstraints) 
        {
            c.Priority = 750;
        }

        NSLayoutConstraint.ActivateConstraints (greenLowPriorityConstraints);

        this.View = view;

        view.LayoutIfNeeded ();
    }
}
1
Mr. Ming 2017-06-13 02:33.

Có thể đây là câu trả lời ngắn gọn nhất, với Masonry , cũng hỗ trợ làm đầy và kéo dài khía cạnh.

typedef NS_ENUM(NSInteger, ContentMode) {
    ContentMode_aspectFit,
    ContentMode_aspectFill,
    ContentMode_stretch
}

// ....

[containerView addSubview:subview];

[subview mas_makeConstraints:^(MASConstraintMaker *make) {
    if (contentMode == ContentMode_stretch) {
        make.edges.equalTo(containerView);
    }
    else {
        make.center.equalTo(containerView);
        make.edges.equalTo(containerView).priorityHigh();
        make.width.equalTo(content.mas_height).multipliedBy(4.0 / 3); // the aspect ratio
        if (contentMode == ContentMode_aspectFit) {
            make.width.height.lessThanOrEqualTo(containerView);
        }
        else { // contentMode == ContentMode_aspectFill
            make.width.height.greaterThanOrEqualTo(containerView);
        }
    }
}];
0
itMaxence 2020-07-29 03:16.

Tôi không thể tìm thấy bất kỳ giải pháp lập trình đầy đủ sẵn sàng nào, vì vậy, đây là bước thực hiện nhanh 5 của tôi cho tiện ích mở rộng điền vào khung hình cho một chế độ xem:

extension UIView {

    public enum FillingMode {
        case full(padding:Int = 0)
        case aspectFit(ratio:CGFloat)
        // case aspectFill ...
    }

    public func addSubview(_ newView:UIView, withFillingMode fillingMode:FillingMode) {
        newView.translatesAutoresizingMaskIntoConstraints = false
        addSubview(newView)

        switch fillingMode {
        case let .full(padding):
            let cgPadding = CGFloat(padding)

            NSLayoutConstraint.activate([
                newView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: cgPadding),
                newView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -cgPadding),
                newView.topAnchor.constraint(equalTo: topAnchor, constant: cgPadding),
                newView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -cgPadding)
            ])
        case let .aspectFit(ratio):
            guard ratio != 0 else { return }

            NSLayoutConstraint.activate([
                newView.centerXAnchor.constraint(equalTo: centerXAnchor),
                newView.centerYAnchor.constraint(equalTo: centerYAnchor),

                newView.leadingAnchor.constraint(greaterThanOrEqualTo: leadingAnchor),
                newView.leadingAnchor.constraint(equalTo: leadingAnchor).usingPriority(900),

                newView.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor),
                newView.trailingAnchor.constraint(equalTo: trailingAnchor).usingPriority(900),

                newView.topAnchor.constraint(greaterThanOrEqualTo: topAnchor),
                newView.topAnchor.constraint(equalTo: topAnchor).usingPriority(900),

                newView.bottomAnchor.constraint(lessThanOrEqualTo: bottomAnchor),
                newView.bottomAnchor.constraint(equalTo: bottomAnchor).usingPriority(900),

                newView.heightAnchor.constraint(equalTo: newView.widthAnchor, multiplier: CGFloat(ratio)),
            ])
        }
    }
}

Và đây là phần mở rộng ưu tiên (đến từ một chuỗi khác nhưng tôi đã "bảo mật nó" bằng một số mẫu khớp giữa 1 ... 1000:

extension NSLayoutConstraint {
    /// Returns the constraint sender with the passed priority.
    ///
    /// - Parameter priority: The priority to be set.
    /// - Returns: The sended constraint adjusted with the new priority.
    func usingPriority(_ priority: Int) -> NSLayoutConstraint {
        self.priority = UILayoutPriority( (1...1000 ~= priority) ? Float(priority) : 1000 )
        return self
    }
}

Hy vọng nó sẽ giúp ~

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Xem đoạn giới thiệu cho bộ phim chuyển thể đầy khói lửa, có sự góp mặt của ngôi sao Edward Norton từ phim Motherless Brooklyn của Jonathan Lethem

Xem đoạn giới thiệu cho bộ phim chuyển thể đầy khói lửa, có sự góp mặt của ngôi sao Edward Norton từ phim Motherless Brooklyn của Jonathan Lethem

Edward Norton đã muốn đưa cuốn tiểu thuyết Motherless Brooklyn của Jonathan Lethem's Joycean 1999 lên màn ảnh kể từ khi nó được xuất bản. Bây giờ, 20 năm sau, một đoạn giới thiệu đã xuất hiện cho câu chuyện sôi nổi, đưa câu chuyện của Lethem trở lại những năm 1950 với rất nhiều gương mặt quen thuộc.

Cách dễ dàng chọn không tham gia trọng tài ràng buộc thẻ Apple

Cách dễ dàng chọn không tham gia trọng tài ràng buộc thẻ Apple

Có thích thú khi sử dụng Thẻ Apple mới của bạn không? Trước khi bạn bắt đầu chi tiêu, có một nhiệm vụ bổ sung cần xem xét: chọn không tham gia trọng tài ràng buộc. Bạn sẽ phát hiện ra các điều khoản trọng tài ràng buộc trong nhiều thỏa thuận tài chính vì nó giúp ngăn các ngân hàng và đối tác kinh doanh của họ không phải ra tòa.

Những người chơi Fortnite World Cup không ghi bàn có cảm giác hài hước về điều đó

Những người chơi Fortnite World Cup không ghi bàn có cảm giác hài hước về điều đó

Điểm số tại vòng chung kết Fortnite World Cup Solo hôm nay là rất lớn, với người chiến thắng Bugha ghi được nhiều hơn 26 điểm so với người về thứ hai là Psalm. Nhưng không phải ai cũng có thể giành chiến thắng: Bốn cầu thủ ra về với 0 điểm, nhưng — ít nhất là trên Twitter — họ là những người thể thao tốt về điều đó.

Báo cáo: Cánh cửa tuyển sinh có thể đã mở cho các ứng viên UCLA có mối quan hệ có ảnh hưởng

Báo cáo: Cánh cửa tuyển sinh có thể đã mở cho các ứng viên UCLA có mối quan hệ có ảnh hưởng

Huấn luyện viên trưởng của bộ môn thể dục dụng cụ UCLA Valorie Kondos-Field theo dõi Katelyn Ohashi thi đấu thăng bằng trong trận gặp Stanford tại Pauley Pavilion vào ngày 10 tháng 3 năm 2019 ở Los Angeles, California. Vụ bê bối gian lận tuyển sinh đại học tiết lộ các chi tiết của một quá trình chính thức hóa để đưa những đứa trẻ thất bại của các gia đình giàu có và nổi tiếng vào các trường đại học đáng tin cậy và danh tiếng, sử dụng một "cửa phụ" đắt tiền cho các bậc cha mẹ mà sự giàu có của họ khiến họ không có cơ hội. chỉ cần tài trợ cho một cánh mới trong khuôn viên trường.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Tầm nhìn đám mây phi tập trung của DFINITY Blockchain

Lưu ý của người biên tập: Bạn đang xem tài liệu lỗi thời từ blog DFINITY đang được bảo quản cho mục đích lưu trữ.

Tầm nhìn đám mây phi tập trung của DFINITY Blockchain

Bài đăng này khám phá tầm nhìn về đám mây phi tập trung của nhóm DFINITY và cách nó liên quan đến các nhà cung cấp blockchain truyền thống và đám mây hiện có như Amazon Web Services. Các minh chứng về công nghệ DFINITY được áp dụng bởi một mạng lưới quy mô lớn sẽ được thực hiện vào mùa thu năm 2017, sau đó sẽ được gây quỹ Chính cho quỹ hỗ trợ phi lợi nhuận, với mạng “đám mây mở” dự kiến ​​sẽ ra mắt vào đầu mùa hè năm 2018 .

Language